我将主要是一个非常中央的库(有点像libc扩展库)从Linux移植到Cygwin,并且由于我有很多设置和拆卸步骤,并且由于我不想使用ctor / dtor属性,因此出于对tcc兼容性的考虑,我的库提供了一个main
函数,并且用户应该使用由库中的main
函数调用的“ my_main”函数。
它在Linux上运行良好,但在Cygwin上,出现链接器错误。
这是用于构建库的MCVE:
#!/bin/sh -eu
cat > libmain.c <<EOF
#include <stdio.h>
long my_main(int, char**);
int main(int C, char**V)
{
int r = 0;
puts("setup");
if(0>my_main(C,V))
r=-1;
puts("teardown");
return r;
}
EOF
gcc -shared -fpic -o libmain.so libmain.c -Wl,--allow-shlib-undefined
以上内容适用于Linux,但在Cygwin上,我得到:
/tmp/cc0s6qei.o:libmain.c:(.text+0x32): undefined reference to `my_main'
/tmp/cc0s6qei.o:libmain.c:(.text+0x32): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `my_main'
collect2: error: ld returned 1 exit status
这可以在Cygwin上使用吗?