[英]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.