LD抱怨:在函数“_start”,未定义提及“__libc_csu_fini”&“__libc_cs

2019-09-28 00:31发布

我使用铛编译GTK +的程序,而不是GCC。 到目前为止好,但我不能正确有LD链接。

原始的makefile称为GCC进行链接,就像这样:

的gcc -g -O2 -export动态-o my_application之somefile.o another.o -pthread -lgnomeui-2 -lSM -lICE -lbonoboui -2- -lgnomevfs -2- -lgnomecanvas -2- -lgnome -2- -lpopt -lbonobo -2- -lbonobo激活-lORBit -2- -lart_lgpl_2 -lgconf -2- -lglade-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lxml2 -pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0

如果我只是在上面的命令铿锵取代GCC,我从后面这样的警告:

铛:警告:在编译过程中未使用的说法:“-e XPORT动态”

问题是:铛不承认“-export动态”作为一个连接器选项,因此它不会将其传递给ld。 这会导致对外部函数的参考文献将被报废:执行最终二进制时,无论是菜单选项也没有按钮反应。

如果我用gcc二进制作品完美(即使它真的铿锵和gcc只进行链接编译)最后的链接步骤。 因为我想完全取代铿锵GCC在我的机器,这是不能接受的。

所以我尝试这样做:

LD /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o -g -O2 -export动态my_application之somefile.o another.o -o -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnomevfs -2- -lgnomecanvas -2- -lgnome -2- -lpopt -lbonobo -2- -lbonobo活化-lORBit -2- -lart_lgpl_2 -lgconf -2- -lglade-2.0 -lgtk-x11-2.0 -lgdk-X11 -2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lxml2 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0

通过将前3个对象我避免“找不到_start”的消息。 但后来我得到了上述两起投诉:

/usr/lib/crt1.o:在功能_start :(+的.text 0×12):未定义参照__libc_csu_fini /usr/lib/crt1.o:在功能_start :(+的.text 0x19):未定义参照__libc_csu_init

我试图在列表中添加crtbegin.o和crtend.o,甚至crt1.o之前,都无济于事。 什么是连接器的正确调用?

(文章编辑):如果没有其他作品,有没有办法赶上什么确切的参数的gcc传递给ldGCC用于链接?

Answer 1:

您可以使用-Wl,-export-dynamic传递-export-dynamic给ld不铛知道关于它。



Answer 2:

gcc会自动添加语言支持库和对象到你提供的链接列表。 你必须对他们自己添加,如果你想调用ld直接。 以从一个例子man ld ,它可能是

ld -o <output> /lib/crt0.o hello.o -lc

尝试添加-lc ,你必须要在它的符号(至少在我的系统,它是)。



文章来源: ld complains: in function “_start”, undefined reference to “__libc_csu_fini” & “__libc_csu_init”
标签: c gtk ld