尝试使用相同符号链接两个不同的数学库时出错

问题描述 投票:0回答:2

cmath
和 AMD 数学库链接到 C++ 时,观察到 AMD 数学库替换了
cmath
中的所有函数。

在使用GDB调试时,发现以下输出证明了上述说法。

Gdb 的命令行输出: commandline output from Gdb

附上用于检查上述语句的代码片段。

#include "amdlibm.h"
#include "math.h"

namespace amdfunc {
    void sqrttest() {
        printf("Calling amd func\n");
        double val = 22.34;
        double val1;
        double val2;
        for (int i = 0; i < 5000000000; i++) {
            val1 = amd_sqrt(val);
        }
    }
}

namespace normalfunc {
    void sqrttest() {
        printf("Calling cmath func\n");
        double val = 22.34;
        double val1;
        double val2;
        for (int i = 0; i < 5000000000; i++) {
            val1 = sqrt(val);
        }
    }
}

int main() {
    normalfunc::sqrttest();
    amdfunc::sqrttest();
}

命令行:使用以下命令链接库并编译代码。

g++ test.cpp -g -o testinglib -L/usr/lib/x86_64-linux-gnu -L/usr/lib -I/usr/include -I/home/test/include -Wl,-rpath,/home/test/lib /home/test/lib/libalm.so -lm

我们在编译时重新排序了库,发现了同样的错误。 附上我们使用文件的 AMD 数学库链接 https://www.amd.com/en/developer/aocl/libm.html

编译并运行可执行文件

c++ linux namespaces amd-processor cmath
2个回答
0
投票

这是预期行为

AOCL-LibM 是一个 C 库,您可以 链接到您的应用程序以替换编译器提供的数学函数。

文档第 67 页

https://www.amd.com/content/dam/amd/en/documents/pdfs/developer/aocl/aocl-v4.0-ga-user-guide.pdf


0
投票

使用 -Wl、-lm、-lalm 修改了链接器选项

-Wl

具体来说,它链接了两个库,并且在比较时观察到这两个库都在使用。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.