|

楼主 |
发表于 2009-5-10 00:37:40
|
显示全部楼层
多谢sentinel兄的热心
非常抱歉,贴命令时少贴了些东西,也是我没有注意到的。出错的编译命令是这样的:
gcc -o duns.e prepar.o (xxx.o, ...) -Xlinker -Bstatic -L(路径) -lck -lvode -lmath -L/usr/lib -lm -L/usr/lib -lg2c
其中的ck,vode,math是原来程序里编译出的静态库。它加了个-Xlinker -Bstatic选项强制成用静态库链接了,因此后面的-lg2c没有正确链接我的libg2c.so动态库。即使指定库文件名写成-L/usr/lib/ -l:libg2c.so也会出错。
最终终于找到了解决办法,在-lg2c前再改回用动态库链接:
-L/usr/lib -Wl,-Bdynamic -lg2c
或指定库文件名
-L/usr/lib -Wl,-Bdynamic -l:libg2c.so
均可。
查了手册,总结一下
`-Wl,option' 是gcc的选项,表示gcc将后面的option传给链接器,这里将-Bdynamic传给ld。-Wl好像和-Xlinker类似
`-Bdynamic‘ 是ld的选项,表示通过动态库链接(Link against dynamic libraries.)
同理,`-Bstatic' 表示用静态库链接。
这个问题解决了。这个程序后面还有些问题,我慢慢折腾。
另外按照ld的手册,指定库文件名应写成-l:filename 我这里写成 -L/usr/lib/ -l:libg2c.so
-L/usr/lib/libg2c.so好像不行 |
|