我正在尝试理解我在链接时在GCC 4.9.2(在ubuntu上)上看到的错误。
具体方案是编译GDAL的新版本并获得pdfium支持。 pdfium是作为静态库构建的。
pdfium构建有效,但GDAL发生链接时错误。它看起来像:
/bin/bash /home/bradh/devel/gdal.git/gdal/libtool --mode=link g++ gdalinfo.lo commonutils.lo /home/bradh/devel/gdal.git/gdal/libgdal.la -o gdalinfo libtool: link: g++ .libs/gdalinfo.o .libs/commonutils.o -o .libs/gdalinfo /home/bradh/devel/gdal.git/gdal/.libs/libgdal.so -L/home/bradh/pdfium/install -L/home/bradh/pdfium/install/lib/pdfium -L/usr/local/lib -L/usr/lib -lpdfium -lfpdfapi -lfpdftext -lformfiller -lpdfwindow -lfxedit -lfpdfdoc -lfxcodec -lfx_libopenjpeg -lfx_lcms2 -lfx_libjpeg -lfx_zlib -lfdrm -lfxge -lfreetype -lfx_agg -lfxcrt -lbigint /usr/local/lib/libfreexl.so -lodbc -lodbcinst -lkmldom -lkmlbase -lkmlengine -lkmlconvenience -lminizip -luriparser /usr/lib/x86_64-linux-gnu/libexpat.so -lxerces-c -ljasper -lnetcdf -lhdf5 /usr/lib/libmfhdfalt.so /usr/lib/libdfalt.so -lgif -lgeotiff /usr/lib/x86_64-linux-gnu/libtiff.so -lpng -lpq -lrt /usr/local/lib/libspatialite.so -ldl /usr/local/lib/libproj.so -lm -lpthread -lz /usr/local/lib/libgeos_c.so /usr/local/lib/libgeos.so /usr/lib/x86_64-linux-gnu/libsqlite3.so -lpcre /usr/lib/x86_64-linux-gnu/libcurl.so -lxml2 -pthread /usr/bin/ld: .libs/gdalinfo: hidden symbol `_ZN13CFDF_Document12CreateNewDocEv' in /home/bradh/pdfium/install/lib/pdfium/libfpdfapi.a(fpdf_parser_fdf.o) is referenced by DSO /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status
我理解错误的含义(参见What does exactly the warning mean about hidden symbol being referenced by DSO?),我知道如何解决它 - 在任何地方关闭隐藏的可见性,或者将两个问题类设置为具有默认可见性(通过属性或declspec)。 / p>
我不明白为什么会引用这些特定类 - 它们不会直接用于GDAL source code。
使用nm,根据评论,它们会出现在gdal.so.20.0.0共享库中:
U _ZN13CFDF_Document12CreateNewDocEv
(U == undefined)。这与链接器错误中的“被引用”部分一致,但并未告诉我为何引用它。
也许有一些内联意味着他们被使用 - 但现在我猜,我宁愿不这样做。特别是因为我似乎猜错了。
所以问题是是否有某种方法来调试链接器逻辑 - 以某种方式找出为什么链接器想要尝试解析这些符号?