我正在尝试在 Linux 下的 Eclipse 中构建一个涉及 JNI 和 ANT 的大型 Java/c++ 项目。其中一个源 c++ 文件调用 log10()
函数进行数学计算。该项目编译正常,但在链接时失败,它提示找不到链接 log10()
所需的 libm.so
库。
我的问题是我无法正确地告诉 Eclipse 链接该文件,即使在执行了以下步骤之后也是如此:
- 在链接器选项中添加了正确的库路径,
- 在链接器包含列表中添加了对
libm
的引用, - 将
-lm
添加到完整的编译选项列表中, - 将
LD_LIBRARY_PATH
设置为指向库的位置, - 将库复制到当前目录。
我做错了什么/有没有人有过在 Eclipse 中正确链接库的经验?有什么建议吗?
最佳答案
这有点令人困惑。 如果您无法在运行时在您的 Java 环境中找到您的库:
在对 log10 进行任何调用之前,尝试在 java 环境中加载您的 .so 库。
System.LoadLibrary("m");
请注意我是如何省略“lib”和“.so”的。
但是,您提示 C++ 的链接器问题,您无法链接到动态文件。您只能链接到静态库或静态导出库(因此您需要在编译时链接到一个 libm.a 文件,然后您的程序将在运行时需要 libm.so)。
您能否发布您收到的确切消息以及收到消息的时间?
关于c++ - 链接器在 Eclipse/JNI/ANT 中找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26905752/