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

作者: laughingman (笑面男)   2024-03-26 22:59:55
開發平台(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
作者: lc85301 (pomelocandy)   2024-03-26 23:05:00
怎麼感覺是要加 -lpthread
作者: Lipraxde (Lipraxde)   2024-03-27 00:09:00
undefined reference to symbol 'pthread,少 link pthread可能那個 DataFrame 有用到,它看起來有提供 CMake package,建議使用 CMake 去生 make,比較不會漏東西
作者: melsonlai   2024-03-27 20:31:00
1. gcc 可以下 -v,它會把實際上執行了什麼指令印出來,可以看 linker 有沒有拿到 -lpthread2. -fuse-ld 是 gcc driver 層的 option,不用透過 -Wl 去使用。-Wl 是拿來傳參數給 linker 的。3. 有 @@ 的 symbol 是 versioned symbol,可以看一下linker 用的 glibc/pthread 是不是夠新的版本
作者: Dracarys (MayShowGunMore)   2024-03-28 02:22:00
你如果要portable,最好別-lpthread而是-pthread讓compiler driver去判斷,不過這種事最好還是交給CMake。然後除了樓上說的之外,-Wl後面能接什麼還得看driver用的linker有沒有支援,比如macOS上ld64/ld64.lld 就跟GNUld/ld.lld很不同,這個都能透過CMake在configure time確認
作者: laughingman (笑面男)   2024-03-28 18:31:00
感謝各位大神的建議,我先試看看用CMake的方式好了。

Links booklink

Contact Us: admin [ a t ] ucptt.com