gpt4 book ai didi

c++ - 与 Unresolved 符号的另一个链接问题

转载 作者:行者123 更新时间:2023-11-30 17:41:20 29 4
gpt4 key购买 nike

我正在尝试在 OpenCL 中为 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 中!

因此,我在链接命令中保留了库的正确顺序,库位于指定的路径上(确实如此)并且它具有符号。在这种情况下,损坏也不是问题: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

最佳答案

如果仔细观察 nm 输出:

002525b4 t clCreateKernel

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

readelf 实用程序的输出对于符号类型更加清晰。

也许库构建不正确?

关于c++ - 与 Unresolved 符号的另一个链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21156304/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com