【问题标题】:Undefined Reference to imp using mingw使用 mingw 对 imp 的未定义引用
【发布时间】:2016-10-06 05:42:04
【问题描述】:

我遇到的问题是在我构建项目时出现“对 '_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__HRDLCloseUnit@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' 的未定义引用

【问题讨论】:

  • 您正在编译 64 位版本吗?失败的导入看起来像是从 32 位二进制文​​件中导出的(带有 __stdcall 名称装饰)。
  • 感谢您的评论!它有很大帮助!所以,我正在使用 64 位库构建,但是,pico 的代码示例说构建一个 32 位应用程序。我的问题是:要构建一个 32 位应用程序,我只需要 64 位库还是需要其他任何东西?例如,不同的功能(我正在使用 pico 的功能,如您在原始问题中所见)。再次感谢!
  • 您不能混合位数。 32 位应用程序需要 32 位库,而 64 位应用程序需要 64 位库。您不能编译 32 位应用程序并链接到 64 位库。

标签: c eclipse windows gcc undefined-reference


【解决方案1】:

在我的情况下,将-mwindows 标志添加到链接器选项是有帮助的。

【讨论】:

    【解决方案2】:

    请注意,在您的编译信息中,-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 目录的配置,使用 gcc 行的编译信息看起来很正常(util -L 就在引号字符的前面)。

    【讨论】:

    • 我尝试更改它,但我不知道。但是,当我构建项目时,命令似乎工作得很好,因为如果我输入“错误”的库名称,则会出现错误,因为找不到库,但是当我正确输入时,不会出现错误。我还需要想办法吗,还是可以?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多