c++ - 链接器在 Eclipse/JNI/ANT 中找不到库

标签 c++ eclipse ant linker java-native-interface

我正在尝试在 Linux 下的 Eclipse 中构建一个涉及 JNI 和 ANT 的大型 Java/c++ 项目。其中一个源 c++ 文件调用 log10() 函数进行数学计算。该项目编译正常,但在链接时失败,它提示找不到链接 log10() 所需的 libm.so 库。

我的问题是我无法正确地告诉 Eclipse 链接该文件,即使在执行了以下步骤之后也是如此:

  1. 在链接器选项中添加了正确的库路径,
  2. 在链接器包含列表中添加了对 libm 的引用,
  3. -lm 添加到完整的编译选项列表中,
  4. LD_LIBRARY_PATH 设置为指向库的位置,
  5. 将库复制到当前目录。

我做错了什么/有没有人有过在 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/

相关文章:

c++ - 线程 for 循环达到了不应该达到的值

java - 如何通过 Java/Eclipse 更改 .PNG 文件名

java - 如何使用 Eclipse TPTP 分析 JNI 应用程序?

eclipse - 从较低的 JRE 访问时,访问库(使用较高的 jdk 编译)会出现异常

ant - 如何设置Bamboo与代码接收一起使用?

gradle - 复制文件时如何过滤gradle?如果 token 以 “Tel-”开头并以 “-Tel”结束,则将 token 替换为V2

java - 使用 Ant 的 System.out

c++ - 读取 C++ 代码 : is this a Class Extension or what?

c++ - 从制表符分隔文件中读取二维数据并存储在 vector C++ 中

C++ 编程创造性问题解决