一个关于gcc编绎一个简单程序的奇怪问题!?

fi9 2003-02-18 11:24:09
昨晚想到去linux下写个动态/静态库,所以就写了下面的两个程序:
// test_library.h
int test(void);

// test_library.cpp
#include <stdio.h>
#include "test_library.h"

int test(void)
{
printf("test library!\n");
return(0);
}

// test.cpp
#include "test_library.h"

int main(int nP, char *cpP)
{
test();
return(0);
}

然后
gcc -c test_library.cpp -o test_library.o
gcc -shared -Wl,soname,libtest.so.1 test_library.o -o libtest.so.1.0
或者
ar cqs test_library.o -o libtest.a
以上都成功地生成动态库和静态库

接着是编绎测试程序test
gcc -c test.cpp -o test.o //成功
gcc test.o -L/current_dir -ltest -o test //出错
出错的大意是:链接错误!找不到函数__gxx_perso???_vol()!
我用nm test.o来查看到以下内容(大概吧)
__gxx_perso???_vol() // 为什么第一个函数就是这个呢?!
// 它又是怎么出来的?!我的程序里没有这个函数啊!
main()
test()
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
henrylu21 2003-02-24
  • 打赏
  • 举报
回复
也可以的,只要/usr/lib也在共享库搜索路径中即可。
fi9 2003-02-19
  • 打赏
  • 举报
回复
TO henrylu21(雨晨):
我没有用ln,可是我用了
cp libtest.so.1.0 /usr/lib/libtest.so.1.0
ln -s /usr/lib/libtest.so.1.0 /usr/lib/libtest.so.1
ln -s /usr/lib/libtest.so.1 /usr/lib/libtest.so
注,是/usr/lib,而不是/lib
不知道这样行不?!
henrylu21 2003-02-18
  • 打赏
  • 举报
回复
编译共享库
gcc -shared -Wl,soname,libtest.so.1 test_library.o -o libtest.so.1.0将共享库载入系统共享路径(创建硬连接)
#ln -s ./libtest.so.1.0 /lib/libtest.so.1
查看一下是否已共享
#ldconfig -v | grep libtest.so.1

编译主程序
#gcc -c test.cpp -o test.o
link整个程序
#gcc test.o -ltest -o test

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧