当前位置: 技术问答>linux和unix
一个关于gcc编绎一个简单程序的奇怪问题!?
来源: 互联网 发布时间:2015-01-31
本文导语: 昨晚想到去linux下写个动态/静态库,所以就写了下面的两个程序: // test_library.h int test(void); // test_library.cpp #include #include "test_library.h" int test(void) { printf("test library!n"); return(0); } // test.cpp #include "t...
昨晚想到去linux下写个动态/静态库,所以就写了下面的两个程序:
// test_library.h
int test(void);
// test_library.cpp
#include
#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()
// test_library.h
int test(void);
// test_library.cpp
#include
#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()
|
编译共享库
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
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