然后我用这两条命令生成了这个.so
然后再编译main.c,再然后用main.o链接.so的时候,老是有这样的错误提示
这是我的环境变量(.bashrc文件):
实在找不出哪里出错了。。。
9 个解决方案
#1
暂时没看出问题来,能用nm 查看一下so的符号表么
#2
这个吗?
#3
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
#4
也不行。。
#5
gcc main.c -ltest -L. -o test 这个顺序可以,可是为什么?
#6
这个或许跟gcc的版本有关系。。
#7
这个或许跟gcc的版本有关系。。
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
gcc main.c -ltest -L. -o test 这个顺序可以,可是为什么?
好吧
#8
编译的时候把库链接放在最后
#9
编译 so
gcc test.c -o libtest.so -shared -fpic
会成生 libtest.so
编译main.c
gcc -o test main.c -L. -ltest -Wl,-rpath,./
-------------------------------------------
gcc 时依赖要放在后面
linux 默认情况是不会在当前目去找 so
如果你的环竟 ld_libaray_path 也没指向当前目录 (可以用 ldconfig 来查看 ...)
所以要添加 -Wl,-rpath,./ (注:这个参中间不能有空格)
gcc test.c -o libtest.so -shared -fpic
会成生 libtest.so
编译main.c
gcc -o test main.c -L. -ltest -Wl,-rpath,./
-------------------------------------------
gcc 时依赖要放在后面
linux 默认情况是不会在当前目去找 so
如果你的环竟 ld_libaray_path 也没指向当前目录 (可以用 ldconfig 来查看 ...)
所以要添加 -Wl,-rpath,./ (注:这个参中间不能有空格)
#1
暂时没看出问题来,能用nm 查看一下so的符号表么
#2
暂时没看出问题来,能用nm 查看一下so的符号表么
这个吗?
#3
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
#4
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
也不行。。
#5
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
gcc main.c -ltest -L. -o test 这个顺序可以,可是为什么?
#6
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
gcc main.c -ltest -L. -o test 这个顺序可以,可是为什么?
#7
这个或许跟gcc的版本有关系。。
尝试一下改变gcc的选项顺序,比如gcc -L -ltest -o main.c
gcc main.c -ltest -L. -o test 这个顺序可以,可是为什么?
好吧
#8
编译的时候把库链接放在最后
#9
编译 so
gcc test.c -o libtest.so -shared -fpic
会成生 libtest.so
编译main.c
gcc -o test main.c -L. -ltest -Wl,-rpath,./
-------------------------------------------
gcc 时依赖要放在后面
linux 默认情况是不会在当前目去找 so
如果你的环竟 ld_libaray_path 也没指向当前目录 (可以用 ldconfig 来查看 ...)
所以要添加 -Wl,-rpath,./ (注:这个参中间不能有空格)
gcc test.c -o libtest.so -shared -fpic
会成生 libtest.so
编译main.c
gcc -o test main.c -L. -ltest -Wl,-rpath,./
-------------------------------------------
gcc 时依赖要放在后面
linux 默认情况是不会在当前目去找 so
如果你的环竟 ld_libaray_path 也没指向当前目录 (可以用 ldconfig 来查看 ...)
所以要添加 -Wl,-rpath,./ (注:这个参中间不能有空格)