我只是把这作为最后的手段,我一直试图解决这个链接器问题,我已经尝试了很多在stackoverflow找到的解决方案,但我已经失去了数量。
基本上,我正在尝试使用共享库中包含的类中的constuctor。我们称之为LibraryClass(string)
,让我们称之为liblibrary.so
。
好的,所以我试图在一个名为DummyClass的类中使用这个构造函数,然后编译这个和许多其他DummyClasses,然后将对象编译成单个可执行文件
我正在使用SCons btw,所以它首先编译所有DummyClasses而不包括任何库
g++ -o DummyClass.o -I.... -I.... .... DummyClass.cpp
g++ -o DummyClass2.o -I.... -I.... .... DummyClass2.cpp
然后它编译成链接必要库的最终可执行文件
g++ -o executable DummyClass.o DummyClass2.o -L/path/to/libs -llibrary -ldependency
此外,该库依赖于另一个库中的函数,我们称之为libdependency.so
编译可执行文件后,它会给我一个undefined reference to LibraryClass(string) in DummyClass.o : DummyClass.cpp line ...
这是一个很大的项目,还有很多其他的库,很多其他类被编译成'可执行文件'
首先,我试图验证函数确实包含在库中,所以我尝试使用nm -C liblibrary.so
,我确实可以看到输出上的函数。但是,如果我尝试使用
nm -CD liblibrary.so
我在那里找不到函数(我不知道为什么但堆栈溢出的一些答案使用-CD其他用的-C)
它没有意义,它应该工作,首先它编译所有类,然后它将具有未定义引用的对象编译成链接到所有必需库的单个可执行文件。
我还能检查什么?
关于另一个问题的可能重复。我相信我的问题是独一无二的,因为已经证明它可能是图书馆本身的一个问题,被标记为可能重复的问题没有提到我可能的解决方案。我相信我的问题可能在将来帮助其他人,因为我一直在寻找堆栈溢出一周的答案。