C++靜態編譯時報錯:warning LNK4217: 本地定義的符號 modbus_read_registers 在函式 "private: void __cdecl xxx“中匯入

語言: CN / TW / HK

Windows環境編譯報錯,跟蹤警告提示資訊發現,modbus_read_registersMODBUS_API修飾:

MODBUS_API int modbus_write_register(modbus_t *ctx, int reg_addr, const uint16_t value);

modbus.h檔案中有定義:

#if defined(_MSC_VER)
# if defined(DLLBUILD)
/* define DLLBUILD when building the DLL */
#  define MODBUS_API __declspec(dllexport)
# else
#  define MODBUS_API __declspec(dllimport)
# endif
#else
# define MODBUS_API
#endif

__declspec(dllimport) 必須用於從動態庫對應的Lib中匯入符號才會用到。

如果是靜態庫或者直接原始碼連結,則必須把__declspec(dllimport)去掉,否則警告。

解決辦法

在專案的.pro檔案中加入定義:

CONFIG += DLLBUILD

改變MODBUS_API的值即可。

分享到: