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

7z5jn7bk  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(178)

在将cmath和amd数学库链接到c++时,观察到amd数学库替换了cmath中的所有函数。
在使用GDB进行调试时,发现以下输出证明了上述语句。commandline output from Gdb
附加用于检查上述语句的代码段。

  1. #include "amdlibm.h"
  2. #include "math.h"
  3. namespace amdfunc {
  4. void sqrttest() {
  5. printf("Calling amd func\n");
  6. double val = 22.34;
  7. double val1;
  8. double val2;
  9. for (int i = 0; i < 5000000000; i++) {
  10. val1 = amd_sqrt(val);
  11. }
  12. }
  13. }
  14. namespace normalfunc {
  15. void sqrttest() {
  16. printf("Calling cmath func\n");
  17. double val = 22.34;
  18. double val1;
  19. double val2;
  20. for (int i = 0; i < 5000000000; i++) {
  21. val1 = sqrt(val);
  22. }
  23. }
  24. }
  25. int main() {
  26. normalfunc::sqrttest();
  27. amdfunc::sqrttest();
  28. }

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

  1. 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
编译并运行可执行文件

stszievb

stszievb1#

这是故意的行为
AOCL-LibM是一个C库,你可以链接到你的应用程序来替换编译器提供的数学函数。
文件第67页
https://www.amd.com/content/dam/amd/en/documents/pdfs/developer/aocl/aocl-v4.0-ga-user-guide.pdf

相关问题