2014-11-24 93 views
0

我正在编译我自己的使用其他(外部).so库的.so库。我创建了我自己的CMakeLists.txt。对于外部库,我使用提供的CMakeList.txt并将其添加到我的CMakeLists.txt(add_subdirectory)中的项目中。我被连接卡住了。我的图书馆无法加载外部模块。加载外部共享库时g ++链接问题

它说

未定义的符号:_Z13SomeFunctionhhhiiiPchhddhhhS_h

当我检查外部的.so模块符号,我发现

_Z13SomeFunctionbbbiiiPcbbddbbbS_b

因此,符号呈现的.so模块中,但名称不匹配。

任何帮助?

+0

'extern“C”'应该有帮助。参见[Name mangling](http://en.wikipedia.org/wiki/Name_mangling) – Drop 2014-11-24 11:46:51

+0

http://stackoverflow.com/a/12574420/560648 – 2014-11-24 11:56:00

回答

-1

我认为编译器找不到.so模块。 您可能必须使用这些标志-L和-l进行编译。 如果您的LIB被称为libmy.so你将不得不使用:g++ *.c -L path/to/libmy/ -lmy

编辑

外部lib.so路径必须在LD_PRELOAD环境变量,检查此则。

+0

我在ldd mylib.so中看到正确的路径。 – user1085593 2014-11-24 11:46:10

+0

当您尝试编译自己的.so时会发生该问题吗? – 2014-11-24 11:48:00

+0

检查您的.so模块中的其他外部.so模块的调用是否正确,检查每个函数的名称并检查是否未命中在链接器中键入.so名称模块 – 2014-11-24 11:50:01