※ [本文轉錄自 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):