我有一个奇怪的问题,将c ++与Leptonica联系起来。普通函数调用工作正常,但我需要库中最初未在.so库中公开的函数。所以我在源代码中搜索了两个有趣的函数,删除了 static 关键字,因此它们看起来与暴露的类似。在make clean之后我重新制作了完整的库。 .so文件看起来没问题:
nm liblept.so.5.0.0 ... 000000000009d010 T dewarpGetMeanVerticals 000000000009d160 T dewarpGetTextlineCenters 000000000009d8f0 T dewarpIsLineCoverageValid
编译成.o文件并观察它:
g++ -c -std=c++11 -I../leptonica/src/src/ preproc.cpp -L../leptonica/src/.libs/ -llept -o preproc nm preproc ... U dewarpGetMeanVerticals U dewarpIsLineCoverageValid
虽然没有-c标志的相同编译导致
/tmp/ccCPqS1R.o: In function `_dewarpGetTextlineCenters(Pix*, int)': preproc.cpp:(.text+0x3d5): undefined reference to `dewarpGetMeanVerticals' /tmp/ccCPqS1R.o: In function `_dewarpBuildPageModel(L_Dewarp*, char const*)': preproc.cpp:(.text+0x81d): undefined reference to `dewarpIsLineCoverageValid' collect2: error: ld returned 1 exit status
我做错了什么?
提前感谢:Balázs
答案 0 :(得分:0)
我想你可能需要extern" C"如果你想在这些函数中公开它们,那么围绕这些函数的关键字。由于名字似乎不会被.so中的C ++编译器破坏,所以情况可能并非如此。
我注意到您向我们展示了liblept.so.5.0.0中的内容以及与liblept.so相关联的信息。您是否可能需要更新符号链接以便链接到正确的.so文件?