还有另一个与未解决的符号相关的问题

时间:2014-01-16 08:02:29

标签: c++ c g++ arm

我正在尝试在OpenCL中为ARM GPU构建我的程序 - 马里。

我有一个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和目标文件的原始条目都没有被破坏。 尝试使用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

1 个答案:

答案 0 :(得分:0)

仔细查看nm输出:

002525b4 t clCreateKernel

您会注意到该符号标有小写't',表示该符号具有本地绑定(例如静态函数),因此不会考虑绑定到另一个目标文件中的未定义符号。你可以找到大多数神秘的符号类型的解释" nm使用的字母:https://sourceware.org/binutils/docs/binutils/nm.html

readelf实用程序的输出更清楚符号类型。

也许图书馆构建错误了?