[問題] C++ DataFrame 編譯問題

看板C_and_CPP (C/C++)作者 (笑面男)時間9月前 (2024/03/26 23:00), 編輯推噓3(3015)
留言18則, 5人參與, 8月前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) g++ (GCC) 14.0.1 20240306 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) https://github.com/hosseinmoein/DataFrame 這個開源專案的函式庫 問題(Question): 我是使用vcpkg來安裝這個函式庫的,我確定libDataFrame.a有被放到 /home/vcpkg/installed/x64-linux/lib,但在我用底下指令編譯: g++ main.cpp -o main -I /home/vcpkg/installed/x64-linux/include/ -L /home/vcpkg/installed/x64-linux/lib/ -lDataFrame --std=c++23 得到以下錯誤資訊: /opt/rh/devtoolset-7/root/usr/bin/ld: /tmp/ccSFiQME.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' //lib64/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status 我以為是我的ld版本太舊的關係,所以在編譯的時候加上-Wl,-fuse-ld=/opt/rh/devtoolset-11/root/bin/ld, 但編譯的時候似乎還是使用/opt/rh/devtoolset-7/root/usr/bin/ld 這個linker, 所以我的問題有兩個,這個錯誤訊息真的是因為我的ld版本的關係嗎?還是有其他原因? 如果是版本的關係,我要如何使用新版的ld, 如果有知道的大神,請救救小弟,感謝感謝! -- 生死去來,棚頭傀儡,一線斷時,落落磊磊。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.48.174 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1711465240.A.F3F.html

03/26 23:05, 9月前 , 1F
怎麼感覺是要加 -lpthread
03/26 23:05, 1F

03/27 00:09, 9月前 , 2F
undefined reference to symbol 'pthread,少 link pth
03/27 00:09, 2F

03/27 00:09, 9月前 , 3F
read
03/27 00:09, 3F

03/27 00:12, 9月前 , 4F
可能那個 DataFrame 有用到,它看起來有提供 CMake pac
03/27 00:12, 4F

03/27 00:12, 9月前 , 5F
kage,建議使用 CMake 去生 make,比較不會漏東西
03/27 00:12, 5F

03/27 20:31, 8月前 , 6F
1. gcc 可以下 -v,它會把實際上執行了什麼指令印出來
03/27 20:31, 6F

03/27 20:31, 8月前 , 7F
,可以看 linker 有沒有拿到 -lpthread
03/27 20:31, 7F

03/27 20:31, 8月前 , 8F
2. -fuse-ld 是 gcc driver 層的 option,不用透過 -W
03/27 20:31, 8F

03/27 20:31, 8月前 , 9F
l 去使用。-Wl 是拿來傳參數給 linker 的。
03/27 20:31, 9F

03/27 20:31, 8月前 , 10F
3. 有 @@ 的 symbol 是 versioned symbol,可以看一下
03/27 20:31, 10F

03/27 20:31, 8月前 , 11F
linker 用的 glibc/pthread 是不是夠新的版本
03/27 20:31, 11F

03/28 02:22, 8月前 , 12F
你如果要portable,最好別-lpthread而是-pthread讓comp
03/28 02:22, 12F

03/28 02:22, 8月前 , 13F
iler driver去判斷,不過這種事最好還是交給CMake。然
03/28 02:22, 13F

03/28 02:22, 8月前 , 14F
後除了樓上說的之外,-Wl後面能接什麼還得看driver用的
03/28 02:22, 14F

03/28 02:22, 8月前 , 15F
linker有沒有支援,比如macOS上ld64/ld64.lld 就跟GNU
03/28 02:22, 15F

03/28 02:22, 8月前 , 16F
ld/ld.lld很不同,這個都能透過CMake在configure time
03/28 02:22, 16F

03/28 02:22, 8月前 , 17F
確認
03/28 02:22, 17F

03/28 18:31, 8月前 , 18F
感謝各位大神的建議,我先試看看用CMake的方式好了。
03/28 18:31, 18F
文章代碼(AID): #1c0kCOy_ (C_and_CPP)
文章代碼(AID): #1c0kCOy_ (C_and_CPP)