我遇到的问题是构建项目时出现的“未定义引用‘_imp__...’”错误。我使用的是 Windows 7、MinGW、Eclipse 以及不是我制作的 .lib 和 .dll 文件,而是我直接从向我出售其产品的公司获取的。
我使用 -l 命令链接 HRDL.lib 文件,并且 PicoHRDL.dll 位于同一目录。找到了 lib 文件(我确信这一点),但出现了错误。我已使用 -L 命令包含完整路径。我已将头文件包含在函数声明中,我得到了未定义的引用,但错误仍然存在。
我已经联系了 Eclipse 支持和 Picotech 支持(上述公司),但他们到目前为止还无法定位问题。
这些是命令:
gcc -O0 -g -Wall -c -fmessage-length=0 -o ACD_SOURCE.o "..\\ACD_SOURCE.c"
gcc "-LC:\\Users\\Falamana\\Desktop\\Eclipse\\ADC_project1\\Libraries" -shared -o libADC_24_DataLogger_App.exe ACD_SOURCE.o -lHRDL
以下是错误:
ACD_SOURCE.o:在函数“main”中:
C:\Users\Falamana\Desktop\Eclipse\ADC_project1\Debug/../ACD_SOURCE.c:70: 对 `_imp__HRDLGetUnitInfo@16' 的未定义引用
C:\Users\Falamana\Desktop\Eclipse\ADC_project1\Debug/../ACD_SOURCE.c:99: 对 `_imp__HRDLCoseUnit@4' 的未定义引用
ACD_SOURCE.o:在函数“SelectUnit”中:
C:\Users\Falamana\Desktop\Eclipse\ADC_project1\Debug/../ACD_SOURCE.c:115: 对 `_imp__HRDLGetUnitInfo@16' 的未定义引用
C:\Users\Falamana\Desktop\Eclipse\ADC_project1\Debug/../ACD_SOURCE.c:167: 对 `_imp__HRDLGetUnitInfo@16' 的未定义引用
就我而言,将
-mwindows
标志添加到链接器选项很有帮助。
请注意,在您的编译信息中,
-L
选项符号应该不在引号内。也就是说,
gcc "-LC:\Users\Falamana\Desktop\Eclipse\ADC_project1\Libraries" -shared -o libADC_24_DataLogger_App.exe ACD_SOURCE.o -lHRDL
应该是
gcc -L"C:\Users\Falamana\Desktop\Eclipse\ADC_project1\Libraries" -shared -o libADC_24_DataLogger_App.exe ACD_SOURCE.o -lHRDL
因此,请检查您使用的任何 IDE 中 lib 目录的配置,util 的 gcc 编译信息行看起来正常( util
-L
位于引号字符之前)。