苦苦挣扎编译一个简单的c程序(gcc)

时间:2016-04-16 15:38:06

标签: c gcc

我有一个非常古老的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编译任何东西

3 个答案:

答案 0 :(得分:1)

您收到链接器错误。

您需要链接定义了这些函数的库(或目标文件)。

答案 1 :(得分:1)

在Windows上,您无法直接与.dll链接,您必须链接导入库,名称.lib。有关更多信息,请参阅:

关于动态链接:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682592(v=vs.85).aspx

隐式链接:

https://msdn.microsoft.com/en-us/library/d14wsce5.aspx

答案 2 :(得分:0)

未定义的引用通常意味着编译器没有看到此变量的正确声明。您是否在C程序中包含头文件(定义此变量)?

#include "header_file.h"