【发布时间】:2014-12-22 03:23:08
【问题描述】:
我正在尝试找出一个更大的问题,这里是简化的测试用例。
#include <netdb.h>
int main(int argc, char** argv)
{
getnetbyname("localhost");
return 0;
}
我编译为:
$ gcc -c -Werror -Wall foo.c
$ gcc foo.o
foo.o:foo.c:(.text+0x16): undefined reference to `getnetbyname'
collect2: error: ld returned 1 exit status
$ gcc foo.o -llwres
foo.o:foo.c:(.text+0x16): undefined reference to `getnetbyname'
collect2: error: ld returned 1 exit status
$ gcc foo.o -lwsock32
foo.o:foo.c:(.text+0x16): undefined reference to `getnetbyname'
collect2: error: ld returned 1 exit status
$ gcc foo.o -lmswsock
foo.o:foo.c:(.text+0x16): undefined reference to `getnetbyname'
collect2: error: ld returned 1 exit status
$ gcc foo.o -lamIcrazy
/usr/lib/gcc/i686-pc-cygwin/4.8.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lamIcrazy
collect2: error: ld returned 1 exit status
不知道从哪里开始,我很确定 Perl 使用了这个参考,但我不能遵循构建(还)。 gcc foo.o 在 Centos 6 上工作。
这里是带有 getnetbyname 符号的 .a 文件
Binary file /usr/lib/perl5/5.14/i686-cygwin-threads-64int/CORE/libperl.a matches
Binary file /usr/lib/w32api/libmswsock.a matches
Binary file /usr/lib/w32api/libwsock32.a matches
$ nm /usr/lib/w32api/libmswsock.a --demangle | grep -B 10 getnetbyname
dqsls00019.o:
00000000 b .bss
00000000 d .data
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 t .text
U _head_lib32_libmswsock_a
00000000 I _imp__getnetbyname@4
00000000 T getnetbyname@4
$ nm /usr/lib/w32api/libwsock32.a --demangle | grep -B 10 getnetbyname
duegs00043.o:
00000000 b .bss
00000000 d .data
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 t .text
U _head_lib32_libwsock32_a
00000000 I _imp__getnetbyname@4
00000000 T getnetbyname@4
【问题讨论】:
标签: gcc cygwin undefined-reference