我想在OpenCL for ARM GPU - Mali中構建我的程序。尚未解決的符號的另一個鏈接問題
我有一個圖書館libMali.so,其中包含必要的符號:
arm-v7a15v4r3-linux-gnueabi-nm *root_to_lib*/libMali.so
返回線,如
002525b4 t clCreateKernel
和許多其他所有預期的OpenCL的符號。
然而,隨着
arm-v7a15v4r3-linux-gnueabi-g++ -c -Wall mandelbrot.cpp -o mandelbrot.o
arm-v7a15v4r3-linux-gnueabi-g++ mandelbrot.o -o mandelbrot -L*root_to_lib* -lMali
編譯帶給我喜歡
mandelbrot.cpp:(.text+0x2e4): undefined reference to
clCreateKernel'`
錯誤和其他所有的符號,這是在實際存在libMali.so!
所以,我在鏈接命令中保留了librabies的正確順序,庫在指定的路徑上(它確實是)並且它具有符號。 在這種情況下,Mangling也不是問題:使用extern C
說明符,您可以看到lib和object文件的原始條目未被損壞。 嘗試使用arm-v7a15v4r3-linux-gnueabi-gcc
完成同樣的事情除了需要手動鏈接更多的C++庫(使用-L * path * -llib)之外,沒有帶來任何改變。 libMali.so由arm-v7a15v4r3-linux-gnueabi-g++/gcc/ld
構建,所以這不是工具鏈版本的問題。
我已經跑出了想法。可能有人在這裏知道更多棘手的部分鏈接過程?
編輯: 實際上,mandelbrot.cpp
是來自Mali-SDK的示例代碼。我只是在這個例子中顯示了我的鏈接器問題,因爲代碼中顯然沒有問題。你可以在這裏看到的代碼:
http://malideveloper.arm.com/downloads/deved/tutorial/SDK/opencl/mandelbrot_8cpp_source.html
http://malideveloper.arm.com/downloads/deved/tutorial/SDK/opencl/mandelbrot_8cl_source.html
你可以發佈實際的代碼(也許只是一個簡單的例子,只是做一個基本的內核,並足夠的clCreateKernel調用)。我每天都這樣做,每天都這樣,所以這可能很簡單,但沒有看到實際的代碼出錯,很難說。 –
@MatsPetersson mandelbrot.cpp是來自Mali-SDK的示例代碼。我沒有改變它 - 我只是現在測試功能。代碼的編譯階段已成功傳遞,唯一的問題是鏈接 - 由於某些原因,鏈接器看不到符號。 – user3176112
在鏈接命令中使用'-Wl, - verbose'(注意:在選項中沒有空格)告訴鏈接器轉儲有關正在搜索的庫的信息,以確保該工具正在查看您期望的文件至。 –