[問題] dlopen load shared object seg fault
看板C_and_CPP作者antirazin (~ SNSD & KARA ~ )時間7年前發表 (2018/02/11 17:28), 7年前編輯推噓-1(0推 1噓 4→)留言5則, 3人參與, 7年前最新討論串1/1
開發平台(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):
--
推
10/11 21:45,
10/11 21:45
→
10/11 21:46,
10/11 21:46
→
10/11 21:46,
10/11 21:46
→
,
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.151.163
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1518370105.A.D89.html
※ antirazin:轉錄至看板 LinuxDev 02/12 01:30
→
02/12 07:32,
7年前
, 1F
02/12 07:32, 1F
噓
02/12 08:49,
7年前
, 2F
02/12 08:49, 2F
不好意思,晚上回去再補上可用的資訊~
※ 編輯: antirazin (125.227.2.182), 02/12/2018 09:54:16
※ 編輯: antirazin (123.51.176.121), 02/12/2018 10:24:36
※ 編輯: antirazin (123.51.176.121), 02/12/2018 10:26:00
→
02/12 21:21,
7年前
, 3F
02/12 21:21, 3F
Link正常喔~
※ 編輯: antirazin (114.24.189.45), 02/12/2018 22:29:15
→
02/12 23:22,
7年前
, 4F
02/12 23:22, 4F
→
02/12 23:23,
7年前
, 5F
02/12 23:23, 5F
後來編譯時我加上-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 obje
ct file: No such file or directory
看起來executable找不到libssl,
所以我再加上-Wl,-rpath,/usr/local/lib 執行就正常了!
還是謝謝各位大大的意見~
※ 編輯: antirazin (114.24.156.179), 02/25/2018 22:23:18