我有一个非常古老的C程序,想要编译到Windows。所以我尝试这样做:
gcc -DNO_GLIBC=1 sakide.c -o sakide.exe
然后返回:
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0xa4): undefined reference to `ekiGetLibVersion'
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x6b6): undefined reference to `ekiGetLibVersion'
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x8ff): undefined reference to `ekiEncodeUrl'
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x954): undefined reference to `ekiDecodeUrl'
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x993): undefined reference to `ekiDecodeUrl'
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0xa62): undefined reference to `ekiGetKeyInfo'
collect2.exe: error: ld returned 1 exit status
此ekiGetLibVersion
位于.h文件中:
INT EKIAPI ekiGetLibVersion(char *outBuffer, LPINT outBufferSize);
我也有一个.dll名称。
我从来没有使用C编译任何东西
答案 0 :(得分:1)
您收到链接器错误。
您需要链接定义了这些函数的库(或目标文件)。
答案 1 :(得分:1)
在Windows上,您无法直接与.dll链接,您必须链接导入库,名称.lib。有关更多信息,请参阅:
关于动态链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682592(v=vs.85).aspx
隐式链接:
答案 2 :(得分:0)
未定义的引用通常意味着编译器没有看到此变量的正确声明。您是否在C程序中包含头文件(定义此变量)?
#include "header_file.h"