【问题标题】:MinGW: Undefined reference to `iupKeyCodeToName(int)'MinGW:未定义对“iupKeyCodeToName(int)”的引用
【发布时间】:2018-12-21 03:40:47
【问题描述】:

我正在尝试制作此示例的 Windows 可执行文件:https://www.tecgraf.puc-rio.br/iup/examples/C/sample.c 在 Linux 上借助此工具:https://github.com/jprjr/iup-build 在 Ubuntu 16.04 上,但在尝试交叉编译时出现此链接错误:

daniel@daniel-desktop:~/Desktop/$ make
i686-w64-mingw32-g++ -static -I/home/daniel/iup-build/deps/iup-3.22/include -I/home/daniel/iup-build/deps/cd-5.11.1/include -I/home/daniel/iup-build/deps/im-3.12/include -I/home/daniel/iup-build/deps/zlib-1.2.8/include -I/home/daniel/iup-build/deps/freetype-2.6.3/include -o sample.exe sample.c -L/home/daniel/iup-build/deps/iup-3.22/lib/mingw4 -L/home/daniel/iup-build/deps/cd-5.11.1/lib/mingw4 -L/home/daniel/iup-build/deps/im-3.12/lib/mingw4 -L/home/daniel/iup-build/deps/zlib-1.2.8/lib/mingw4 -L/home/daniel/iup-build/deps/freetype-2.6.3/lib/mingw4 -lm -lcdim -lim -lim_process -lcd -liupcd -liupim -liupimglib -liupcontrols -liup -liupgl -lz -lim -lcd -lfreetype6 -lgdi32 -lcomdlg32 -lcomctl32 -luuid -loleaut32 -lole32 -lwinspool
/tmp/cccFDodU.o:sample.c:(.text+0x1da): undefined reference to 'iupKeyCodeToName(int)'
/tmp/cccFDodU.o:sample.c:(.text+0x215): undefined reference to 'iupKeyCodeToName(int)'
/tmp/cccFDodU.o:sample.c:(.text+0x55e): undefined reference to 'iupKeyCodeToName(int)'
collect2: error: ld returned 1 exit status
makefile:18: recipe for target 'sample.exe' failed
make: *** [sample.exe] Error 1

libiup.a 好像有 iupKeyCodeToName:

daniel@daniel-desktop:~/iup-build/output/iup-3.22-i686-w64-mingw32/i686-w64-mingw32/lib$ nm -C -A *.a | grep iupKeyCodeToName
libiup.a:iup_key.o:00000340 T iupKeyCodeToName
libiup.dll.a:d000887.o:00000000 I _imp__iupKeyCodeToName
libiup.dll.a:d000887.o:00000000 T iupKeyCodeToName

所以我不知道是什么原因造成的,我也试过做同样的事情,但在 Windows 7 上也使用 mingw,但失败并出现完全相同的错误。

但是,我可以使用 gcc 在 Ubuntu 16.04 上为 Linux 编译此示例,而不会出现任何问题。

【问题讨论】:

    标签: mingw iup


    【解决方案1】:

    可能是因为函数声明是在文件中完成的。我猜由于您使用 g++ 构建可以编译为 C++ 的示例,因此函数声明不正确,因为它缺少外部 C。所以链接器错误。

    我认为这样的事情可以解决问题:

    #ifdef __cplusplus
    extern "C" char *iupKeyCodeToName(int code);
    #endif
    

    【讨论】:

    • 谢谢安东尼奥!这确实是我回到这里用你在 IUP 邮件列表上给我的答案来回答我自己的问题的问题,但你在这方面打败了我。如果我有足够的声誉,我会竖起大拇指:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2011-08-13
    相关资源
    最近更新 更多