簡體   English   中英

Linux共享庫c ++

[英]Linux Shared Libraries c++

我有一個明智的共享圖書館。 我如何在我的程序中使用它? 我是否需要包含該庫的標題?

我在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
    };

您需要在應用程序中包含頭文件並鏈接它。

看看如何在共享庫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 

您是否還修改了包含路徑(-I選項),以便它知道在哪里查找庫的標頭? 如果你還沒有這樣做,那么編譯器會抱怨無法找到函數/類/結構/等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM