作者antirazin (~ SNSD & KARA ~ )
看板LinuxDev
标题Fw: [问题] dlopen load shared object seg fault
时间Mon Feb 12 01:30:16 2018
※ [本文转录自 C_and_CPP 看板 #1QW7qvs9 ]
作者: antirazin (~ SNSD & KARA ~ ) 看板: C_and_CPP
标题: [问题] dlopen load shared object seg fault
时间: Mon Feb 12 01:28:21 2018
开发平台(Platform): (Ex: Win10, Linux, ...)
CentOS 7 (VMware)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
g++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
手边有一个.so档,想透过dlopen使用里面的function,
虽然编译过了,但是执行时出现segmentation fault。
初步排错,改喂/usr/lib64下的内建library的.so没问题,
这样是表示这.so档有问题吗?
但我用nm print是没问题的。
目前没什麽头绪,因此在这边请教各位大大了 m(_ _)m
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
执行後Segmentation fault
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
#include <dlfcn.h>
int main(int argc, const char * argv[]) {
void* func = dlopen("/home/test/libtest.so", RTLD_LAZY);
//随便换成内建的 /usr/lib64/libz.so.1.2.7 的话就能跑完
if (!func) {
std::cerr << "Cannot load library: " << dlerror() << '\n';
return 1;
}
return 0;
}
补充说明(Supplement):
--
1F:推 waterspout:其中这男子为什麽在对方说不後 仍强行抚摸对方下体10/11 21:45
2F:→ waterspout:而里面有没有什麽秘密? 好!我们今天也请到了五位来宾10/11 21:46
3F:→ e6638:皓平:其实马雅人早就预言到了10/11 21:46
4F:→ waterspout:皓平 我还没叫到你
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.24.151.163
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1518370105.A.D89.html
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: antirazin (114.24.151.163), 02/12/2018 01:30:16
5F:→ hizuki: 贴程式和结果02/12 07:50
晚上回去会补上
※ 编辑: antirazin (125.227.2.182), 02/12/2018 10:36:37
※ 编辑: antirazin (114.24.189.45), 02/12/2018 22:21:35
※ 编辑: antirazin (114.24.189.45), 02/12/2018 22:23:14
6F:推 harry0890: 你的.so档是怎麽产生,感觉是toolchain不一样所导致的 02/15 07:40
7F:→ antontw: 用 file 先查一下 mime ? 02/22 09:47
後来编译时我加上-L/home/test -ltest 时出现
/home/test/libtest.so: 未定义的参考到「SSL_connect」
/home/test/libtest.so: 未定义的参考到「TLSv1_client_method」
/home/test/libtest.so: 未定义的参考到「SSL_CTX_set_verify」
/home/test/libtest.so: 未定义的参考到「SSL_CTX_check_private_key」
/home/test/libtest.so: 未定义的参考到「SSL_get_peer_certificate」
发现可能是openssl没有安装的关系,
安装完并且在编译时加上-lssl -lcrypto
编译过了但执行时出现错误:
error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
看起来executable找不到libssl,
所以我再加上-Wl,-rpath,/usr/local/lib 执行就正常了!
还是谢谢各位大大的意见~
※ 编辑: antirazin (114.24.156.179), 02/25/2018 22:20:05