我使用铛编译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传递给ld当GCC用于链接?