dmd编译的时候并没有引入c语言库却报错提示如下:homechenfadev_softglibcbinlibgccx86_64-unknown-linux-gnu12x86_64-unknown-linux-gnubinld test_packo in function _D4tool6string13StringBuilder__T2ofTAyuZQiFKQiZCQBuQBsQBotest_pa
从报错信息来看,似乎是缺少对某些函数或变量的定义,这些函数或变量的定义应该在某个库文件中。解决这个问题的方法是在编译时链接上相应的库文件。
根据报错信息,可以看到 ld 缺少以下函数或变量的定义:
- _D4tool6string13StringBuilder__T2ofTAyuZQiFKQiZCQBuQBsQBo
- _D4tool6string13StringBuilder7__ClassZ
- _D4tool6string13StringBuilder6__vtblZ
- _D4tool6string13StringBuilder6__initZ
- _D4tool6string13StringBuilder6__ctorMFAyaZCQBpQBnQBj
- _D4tool6string13StringBuilder__T2ofTAyaZQiFQhZCQBtQBrQBn
- _D4tool6string13StringBuilder6__ctorMFKAyaZCQBqQBoQBk
- _D4tool12stringhelper11replaceCstrFNbNiPaxPaxQdbZQk
- _D4tool12__ModuleInfoZ
根据函数名,可以猜测这些函数或变量的定义应该在名为 libtool.so 和 libtest_pack.so 的动态链接库文件中。因此,需要在编译时链接上这两个库文件。
假设你的编译命令是 dmd test_pack.d,那么需要修改为以下命令:
dmd test_pack.d -L-Lpath/to/lib -L-ltool -L-ltest_pack
其中,-L-Lpath/to/lib 表示要链接的库文件所在的目录是 path/to/lib;-L-ltool 表示要链接名为 libtool.so 的库文件;-L-ltest_pack 表示要链接名为 libtest_pack.so 的库文件。根据实际情况修改路径和库文件名即可。
如果你不知道要链接哪些库文件,可以查看项目中是否有类似 *.a 或 *.so 的文件,这些就是库文件。你也可以尝试在编译时加上 -v 参数,查看编译器的详细输出,可能会提供一些提示
原文地址: https://www.cveoy.top/t/topic/fr5Q 著作权归作者所有。请勿转载和采集!