0

我有一个包含函数列表的 so 文件,现在我想构建一个 C++ 程序来使用库的这些函数

我已经尝试过:g++ -Llibname.so xxx.cpp 并设置了库 .so 的 LD_LIBRARY_PATH 环境变量,但是它仍然给我一个错误,比如找不到函数。

你能给我任何关于用库编译 C++ 程序的想法吗?

非常感谢!

#include <iostream>
#include <signal.hpp>
using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl;
    processData("/home/radwan/2011-07-22Field1/", 0,
                    4500, 1,
                    100, 70,
                    90, 8,
                    100,1.8);
    return 0;
}

头文件声明:

 int processData(char const * directory, int const minimumSignalLevel,
        int const maximumSignalLevel, int const samplingFactor,
        int const minimumTrackDimension, int const minimumMissingVineStocksDimension,
        int const maximumMissingVineStocksDimension, int const maximumFoliageHoleDimension,
        int const cellSide4Average,float const & FRF_R_threshold_Value);
4

3 回答 3

0

请注意,库和目标文件的顺序可能很重要。我最近遇到了类似的问题,解决方案是在链接器命令行中重新排序库开关。

你可以看看这里,看看这是否是你的问题:Linking a DLL using xerces give undefined symbols

于 2013-06-04T09:04:30.763 回答
0

我认为您应该将标头提供给调用者,让调用者通过#include找到它。每个cpp文件都是先通过自己查找符号,如果不告诉它其他头信息,它就不会搜索。但是如果你cc一些*.c文件,编译器会帮助找到对方,即使你不给头文件。

于 2013-06-04T08:46:48.590 回答
0

LD_LIBRARY_PATH用于帮助.so文件的运行时查找。您还可以对可执行文件中的一些路径进行硬编码。无论如何,编译行的一般格式是:

g++ -L可以找到库的目录-l名称不带 lib 前缀或 .so 扩展名`xxx.cpp -o xxx

于 2013-06-04T08:47:18.690 回答