※ 本文轉寄自 ptt.cc, 文章原始頁面
看板C_and_CPP
標題

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

最新2024-03-28 18:31:00
留言18則留言,5人參與討論
推噓3 ( 3015 )
開發平台(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

18 則留言

lc85301, 1F
怎麼感覺是要加 -lpthread

Lipraxde, 2F
undefined reference to symbol 'pthread,少 link pth

Lipraxde, 3F
read

Lipraxde, 4F
可能那個 DataFrame 有用到,它看起來有提供 CMake pac

Lipraxde, 5F
kage,建議使用 CMake 去生 make,比較不會漏東西

melsonlai, 6F
1. gcc 可以下 -v,它會把實際上執行了什麼指令印出來

melsonlai, 7F
,可以看 linker 有沒有拿到 -lpthread

melsonlai, 8F
2. -fuse-ld 是 gcc driver 層的 option,不用透過 -W

melsonlai, 9F
l 去使用。-Wl 是拿來傳參數給 linker 的。

melsonlai, 10F
3. 有 @@ 的 symbol 是 versioned symbol,可以看一下

melsonlai, 11F
linker 用的 glibc/pthread 是不是夠新的版本

Dracarys, 12F
你如果要portable,最好別-lpthread而是-pthread讓comp

Dracarys, 13F
iler driver去判斷,不過這種事最好還是交給CMake。然

Dracarys, 14F
後除了樓上說的之外,-Wl後面能接什麼還得看driver用的

Dracarys, 15F
linker有沒有支援,比如macOS上ld64/ld64.lld 就跟GNU

Dracarys, 16F
ld/ld.lld很不同,這個都能透過CMake在configure time

Dracarys, 17F
確認

laughingman, 18F
感謝各位大神的建議,我先試看看用CMake的方式好了。