![](/img/trans.png)
[英]How to create a header like a standard library header, so that program can be compiled without linking all object files of functions in the header?
[英]Linking against so library without header files via objdump
所以我有一個.so文件,沒有頭文件,我想編譯代碼並鏈接到該文件(長話)
無論如何,我得到objdump來輸出已解散的標題
objdump -g -x -C libglo_crc.so
我得到這樣的結果:
long int Calculate_Message_CRC__FUcPUc (int iLength /* 0x8 */, unsigned char *iMess /* 0xc */)
因此,我知道這是錯誤的名稱,我創建了一個這樣的原型:
long int Calculate_Message_CRC(unsigned char, unsigned char *);
然后嘗試調用Calculate_Message_CRC函數,但是我總是以未定義的引用錯誤結束:
g++ test.cpp -L. -l glo_crc
undefined reference to `Calculate_Message_CRC(unsigned char, unsigned char*)'
難道我做錯了什么? 沒有供應商提供的標頭,我還可以如何鏈接到該庫?
int
,而不是usigned char
。 objdump -g -x -C libglo_bc.so
,但是您正在鏈接glo_crc
( -l glo_crc
)。 為什么? 編譯器將搜索名稱類似於libglo_crc.so
庫,但是根據您的問題,函數Calculate_Message_CRC
在libglo_bc.so
。 是錯字嗎? 還是我錯過了什么? UPD1:正如Steve C所說:您確定該庫已使用相同的編譯器進行編譯嗎? 整改很大程度上取決於編譯器。 一個編譯器可以將Calculate_Message_CRC
為Calculate_Message_CRC_FUcPUc
而另一個編譯器可以像Calculate_Message_CRC_XUzFUz
一樣處理它。 您可以使用nm
和grep
在代碼中找到Calculate_Message_CRC
以查看錯誤的名稱。 與libglo_crc.so
的相同嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.