c++ - Linux 共享库 C++

标签 c++ linux eclipse shared-libraries

我有一个共享库 wise.so。我如何在我的程序中使用它?我需要包含该库的标题吗?

我在 Linux 下使用 Eclipce。我已经使用 -L 和 -l 设置了库的路径。但是我的函数在程序中是看不到的。

你能解释一下共享库是如何工作的吗?

问候。

编辑:

我收到以下错误:

int main() {
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg";
    CEDD_Descriptor::CEDD ced; // undefined reference to `CEDD_Descriptor::CEDD::CEDD[in-charge]()'
    ced.execute(path);
}

标题:

class CEDD
    {
        public:
            CEDD(double Th0, double Th1, double Th2, double Th3,bool CompactDescriptor);
            CEDD();
            ~CEDD(void);

            double T0;
            double T1;
            double T2;
            double T3;
            bool Compact;

            double* execute(char* path);

        private:
            int cedd_segnum;                //number of segments
            int* cedd_partitionSize;        //number of pixels in each segment
    };

最佳答案

您需要在您的应用程序中包含头文件并链接到它。

看看如何使用 shared libraries 中的库和 Linux howto .

如果头文件与您的应用程序不在同一个目录中(通常不在同一目录中),那么您需要告诉编译器在哪里寻找它,您可以使用 -I/path/to/include包括包含头文件的目录的路径。

在链接步骤中,您需要指向库。一般的用法是使用-L/path/to/lib是包含您的库的目录的路径,后跟 -l<libname>其中 <libname>是没有 lib 的图书馆的名字例如如果你有 libboost_serialization-d-1_34_1.so你会用 -lboost_serialization-d-1_34_1

例子:

g++ -I/sw/include -Wall -g -I/usr/local/include/boost-1_36/ -c main.cpp -o main.o
g++ -L/sw/lib -lboost_serialization-d-1_34_1 -o x main.o 

关于c++ - Linux 共享库 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/964249/

相关文章:

linux - Nginx - 从源代码构建 - 不工作

c - 相当于 Linux 命令中的 md5 哈希

java - 哪个版本的 Eclipse 与 App Engine Java 一起使用?

c++ - OpenGL C++ : Struct wrapper for VBO won't initialize members

c++ - 寻找素数的程序意外停止

c++ - 从多个线程调用 C 文件中的函数

linux - 当我在 ubuntu 终端中运行程序时,如何摆脱 "./"?

c++ - 列表结构和数组的奇怪问题

java - 使用Gradle为LibGDX添加工具依赖项时出现问题

java - 为什么 Netbeans 看不到我指的是哪个 varargs 方法?