当前位置: 技术问答>linux和unix
编译动态连接库的问题
来源: 互联网 发布时间:2016-07-13
本文导语: test.c #include void print() { printf("------------------------n"); } gcc -c test.c gcc -shared -o libtest.so test.o 生成了libtest.so库 然后我调用它 main.c extern void print(); int main() { print(); return 0; } ...
test.c
gcc -c test.c
gcc -shared -o libtest.so test.o
生成了libtest.so库
然后我调用它
main.c
gcc -L./ -ltest -o main main.c
./main
error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
请高手指点一下 不知道哪儿错了
#include
void print()
{
printf("------------------------n");
}
gcc -c test.c
gcc -shared -o libtest.so test.o
生成了libtest.so库
然后我调用它
main.c
extern void print();
int main()
{
print();
return 0;
}
gcc -L./ -ltest -o main main.c
./main
error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
请高手指点一下 不知道哪儿错了
|
你要分清,编译和运行是两回事。
编译的时候指定libtest.so只是代表着你的main.c没有语法错误,生成可执行文件。
然后运行的时候去动态加载libtest.so 所以要把libtest.so放到系统库目录里。
/etc/ldconfig?
|
完全可以,参见http://hi.baidu.com/plumstar/blog/item/fce3d1296138bef498250ab0.html
|
要把生成的libtest.so copy到/lib后再执行./main
|
不一定要指定在/lib下面。但是一般都是会放在一个叫lib的目录里面,这个目录可以自己建立,当你运行编译好的程序之前不需指定你的动态库的路径,比如:export LD_LIBRARY_PATH=$HERE/lib,这样应运行编译的bin 文件就应该没有问题了
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.