![](/img/trans.png)
[英]g++ linker undefined reference to only some functions (not all) from shared library
[英]“undefined reference to” many (all?) of the functions in shared library (newbie)
我是C ++的新手。 如果這不連貫,請耐心等待。 我被要求在最初基於OS X的Linux上構建一個大型系統,在該系統上運行良好。 原作者不再在公司任職。 生成系統使用了自動工具,但是還有一些手工生成的Makefile,它們遍歷整個系統,稱為自動生成的Makefile。 我設法編譯了所有的c ++代碼。 該構建系統還使用libtools,並且生成了共享庫並將其存儲在/ usr / local / lib中。
所以現在我想使用這些庫。 我編寫了一個簡短的程序,該程序僅實例化ds_dictionary類的對象並調用其方法之一。 這里是:
#include <iostream>
#include <DSUtils/DSUtils.h>
int main (int argc, char * const argv[]) {
int32_t integer_data=123;
char key_alice_integer[] = "alice_integer";
ds_dictionary my_dict;
my_dict.add_int(key_alice_integer, integer_data);
return 0;
}
我用這個編譯
g++ -lDSUtils -o main my_test_code.cpp
結果:
//usr/local/lib/libDSUtils.so: undefined reference to `ds_breakdown_from_time_interval'
//usr/local/lib/libDSUtils.so: undefined reference to `ds_date_breakdown_with_string'
//usr/local/lib/libDSUtils.so: undefined reference to `ds_seconds_duration_of_interval'
... (about 25 lines like these)
collect2: ld returned 1 exit status
讓我們看一下庫:
garyp@VM:/usr/local/lib$ nm libDSUtils.so | grep ds_breakdown_from_time
U ds_breakdown_from_time_interval
編輯:啊哈。 DSUtils庫是從幾種c ++來源構建的。 源代碼中有一個c程序,它包含所有問題函數。 Makefile系統根本不處理那個c文件。 該c程序會編譯。 理想情況下,我想我會弄清楚如何修改Makefile來編譯該文件並將其添加到庫中,但是我還沒弄清楚如何做到這一點。
我可以將.o文件添加到現有庫中嗎? 怎么樣? 用一個文件創建一個庫? 等等?
EDIT_2:我只是做了
g++ -o main -lDSUtils main.o my_new_objectfile.o
東西可以編譯,鏈接並運行而不會出錯。 應該行嗎? 修復邏輯錯誤后,它確實可以工作。
這個
U ds_breakdown_from_time_interval
告訴我ds_breakdown_from_time_interval
將在運行時由另一個庫解析。 因此,我猜測您需要鏈接到定義ds_breakdown_from_time_interval
的庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.