我需要使用MinGW 4.8.2编译一些库(kuba zip)。我出现链接错误。
[2/2 12.0/sec] Linking C executable test\test.exe.exe
FAILED: test/test.exe.exe
cmd.exe /C "cd . && C:\mingw32\bin\gcc.exe -std=c99 -Wall -Wextra -pedantic -g test/CMakeFiles/test.exe.dir/test.c.obj test/CMakeFiles/test.exe.dir/__/src/zip.c.obj -o test\test.exe.exe -Wl,--out-implib,test\libtest.exe.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
test/CMakeFiles/test.exe.dir/__/src/zip.c.obj: In function `zip_entry_close':
C:\msys64\home\ivan\dev\zip\debug-qt4/../src/zip.c:440: undefined reference to `localtime_s'
这是localtime_s
函数中的问题。 localtime_s
被声明为inline
,并且必须内联。但事实上这是没有发生的。
localtime_s
声明。
__CRT_INLINE errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time) { return _localtime32_s(_Tm,_Time); }
我为此写了一些测试用例。
#include <time.h>
int main()
{
struct tm _Tm;
time_t _Time;
localtime_s(&_Tm, &_Time);
return 0;
}
使用gcc会产生链接错误:
$ gcc localtime_test.c
C:\msys64\tmp\ccEMjUQ8.o:localtime_test.c:(.text+0x1e): undefined reference to `localtime_s'
collect2.exe: error: ld returned 1 exit status
但是g ++或MinGW 5.3.0(gcc和g ++)都没有错误。那么如何使我的测试用例与MinGW 4.8.2 gcc一起使用?
我知道我可以使用_localtime32_s,它可以工作。但这似乎是一个错误的决定。