当前位置: 技术问答>linux和unix
一个静态链接库的编译问题,请大家指点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
来源: 互联网 发布时间:2015-05-18
本文导语: 我用GCC命令如下: gcc -o mytest mytest.cpp -L/home/username/test -lMyLib.so 我的库MyLib.so在/home/username/test下面. 这个命令用来把我的一个SO库链接到我的程序mytest中去,可是编译老是报错: /usr/bin/ld: cannot find -lMyLib.so 我将路径...
我用GCC命令如下:
gcc -o mytest mytest.cpp -L/home/username/test -lMyLib.so
我的库MyLib.so在/home/username/test下面.
这个命令用来把我的一个SO库链接到我的程序mytest中去,可是编译老是报错:
/usr/bin/ld: cannot find -lMyLib.so
我将路径改为相对路径也不行,请问怎么样才能将这个程序正确编译呢?
gcc -o mytest mytest.cpp -L/home/username/test -lMyLib.so
我的库MyLib.so在/home/username/test下面.
这个命令用来把我的一个SO库链接到我的程序mytest中去,可是编译老是报错:
/usr/bin/ld: cannot find -lMyLib.so
我将路径改为相对路径也不行,请问怎么样才能将这个程序正确编译呢?
|
1.如果你使用-L指定你的库路径的方式必须遵循库德命名规则
如泥使用-ltest库,那么你的苦命必须是libtest.a
2。如果你希望直接使用-l/home/username/test/MyLib.so
如泥使用-ltest库,那么你的苦命必须是libtest.a
2。如果你希望直接使用-l/home/username/test/MyLib.so
|
.so是用于动态库
.a是用于静态库
你到底是想使用静态库还是动态库?
.a是用于静态库
你到底是想使用静态库还是动态库?
|
假如你是以root身份工作
先要
vi /root/.bash_profile
在里面加上LD_LIBRARY_PATH=/home/username/test
然后编译的时候加上-lMylib
先要
vi /root/.bash_profile
在里面加上LD_LIBRARY_PATH=/home/username/test
然后编译的时候加上-lMylib
|
如果你有/usr/lib/libMylib.so,则你应这样将它链接到程序中:
-lMylib
就是说文件名的前缀lib和扩展名不用了
-lMylib
就是说文件名的前缀lib和扩展名不用了
|
最好这么写
gcc -L/home/username/test -lMyLib -o mytest mytest.cpp
gcc -L/home/username/test -lMyLib -o mytest mytest.cpp
|
这种情况使用.a
使用ar工具生成.a
例子
gcc -c test.c
ar cvr libtest.a test.o
使用ar工具生成.a
例子
gcc -c test.c
ar cvr libtest.a test.o