&引用;未定义的引用;共享库中的许多(全部?)函数(新手) 我是C++初学者。如果这是不连贯的,请耐心等待。我被要求在linux上构建一个大型系统,这个系统最初是在OSX上构建的,在那里它运行良好。原作者已不在该公司工作。构建系统使用自动工具,但也有一些手工制作的Makefiles,它们在系统中遍历调用自动制作的Makefiles。我已经成功地编译了所有的C++代码。构建系统还使用libtools,共享库生成并存放在/usr/local/lib中
现在我想使用这些库。我编写了一个简短的程序,它只是实例化了类ds\u dictionary的一个对象,并调用它的一个方法。这是:&引用;未定义的引用;共享库中的许多(全部?)函数(新手) 我是C++初学者。如果这是不连贯的,请耐心等待。我被要求在linux上构建一个大型系统,这个系统最初是在OSX上构建的,在那里它运行良好。原作者已不在该公司工作。构建系统使用自动工具,但也有一些手工制作的Makefiles,它们在系统中遍历调用自动制作的Makefiles。我已经成功地编译了所有的C++代码。构建系统还使用libtools,共享库生成并存放在/usr/local/lib中,c++,reference,undefined,shared,C++,Reference,Undefined,Shared,现在我想使用这些库。我编写了一个简短的程序,它只是实例化了类ds\u 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";
#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;
}
结果是:
//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
g++ -o main -lDSUtils main.o my_new_objectfile.o
而且编译、链接和运行都不会出错。这样行吗?在修复了一个逻辑错误之后,它就可以工作了。这
U ds_breakdown_from_time_interval
告诉我在运行时另一个库将解析来自时间间隔的ds\u细分。因此,我猜您需要链接到从时间间隔定义的库
U ds_breakdown_from_time_interval
告诉我在运行时另一个库将解析来自时间间隔的ds\u细分。因此,我猜您需要链接到定义从时间间隔开始的ds\u细分的库。我想你已经把我带到了问题的根源。请参阅原始post.Ding中的我的编辑。我想你已经把我带到了问题的根源。请参阅原始帖子中的我的编辑。将要修复的Makefile的一些摘录会有所帮助。特别是,生成libDSUtils.so的部分,以及将*.cpp文件转换为*.o文件的部分。如果Makefile使用内置默认规则,则可能不会编写第二部分。要修复的Makefile的一些摘录可能会有所帮助。特别是,生成libDSUtils.so的部分,以及将*.cpp文件转换为*.o文件的部分。如果Makefile使用内置默认规则,则可能不会编写第二部分。