当我探索开放源代码的时候,我会多次看到这个库(armeabi),并且为了定义它,我发现了所有的结果,并且没有定义它,我想知道这个armeabi是什么,以及为什么它们使用它在Android应用程序。
我有一个与另一个(第三方)共享库链接的共享库。 我的共享库然后在我的应用程序中使用dlopen加载。 所有这一切工作正常(假设文件是在正确的path等)。 现在,问题是,我甚至不需要指定链接我的库时链接到第三方共享库。 GCC接受它而不报告有关未定义参考的错误。 所以,这个问题; 我如何强制GCC通知我未定义的引用 ? 如果我更改我的库是(暂时)一个可执行文件,我得到未定义的引用(当不提供库到链接器)。 (如果我指定,工作正常。) 即,完成以下工作: g++ -fPIC -shared -o libb.so bo g++ -fPIC -shared -o liba.so ao g++ -o a.exe a.cpp 如果第二行不发出错误,第三行则报告未定义的引用。 示例代码: 啊: class a { public: void foobar(); }; a.cpp: #include "ah" #include "bh" void a::foobar() { b myB; myB.foobar(); } int main() { a myA; myA.foobar(); […]
我正在尝试编写cmake规则来在linux上使用boost.python为python构builddynamic加载的库。 我想用'foo'作为python模块的名字。 所以,图书馆必须被称为foo.so 但默认情况下,cmake使用库命名的标准规则,所以如果我写 add_library(foo foo.cpp) 我会得到libfoo.so输出。 甚至set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar")将创buildlibfoobar.so 。 如何改变这种行为?
在Windows API和其他库中,我已经看到多个入口点的方法,我已经注意到在MyApiCall和MyApiCallEx等场景中使用Ex缩写。 我的假设是,这代表扩展或额外可以有人请确认? 为什么selectEx而不是MyApiCall2或类似的任何历史logging也将不胜感激。
我有一个共享库,我希望链接使用GCC的可执行文件。 共享库的名称不是libNAME.soforms,所以我不能使用通常的-l选项。 (它恰巧也是一个Python扩展,所以没有'lib'前缀。) 我能够将path传递到库文件直接到链接命令行,但这会导致库path被硬编码到可执行文件中。 例如: g++ -o build/bin/myapp build/bin/_mylib.so 有没有办法链接到这个库,而不会导致path硬编码到可执行文件?
我有一些使用一些共享库的代码(在gcc上的c代码)。 在编译时,我必须使用-I和-L显式地定义include和库目录,因为它们不在标准位置。 当我尝试运行代码时,出现以下错误: ./sync_test ./sync_test: error while loading shared libraries: libsync.so: cannot open shared object file: No such file or directory 但是,请执行以下操作,一切正常: export LD_LIBRARY_PATH="/path/to/library/" ./sync_test 现在奇怪的是,这只能工作一次。 如果我再次尝试运行sync_test,则会得到相同的错误,除非先运行导出命令。 我尝试添加以下内容到我的.bashrc,但没有任何区别: LD_LIBRARY_PATH="/path/to/library/"
我有以下布局: top_project + subproject1 + subproject2 每个subproject1和subproject2创build一个静态库。 我想将这些静态库链接到top_project级别的单个共享库中。 我目前收集到的信息是: 要么编译使用-fPic (除了Windows之外的所有必要的),以创build位置无关的代码,这将允许将静态库链接到单个共享库或解压缩所有静态库(例如使用ar )并将它们重新链接到共享图书馆(我认为这是一个不雅的和非便携式的解决scheme) 所有的源文件必须明确地给予add_library命令:出于某种我不理解的原因,简单地写add_library(${PROJECT_NAME} SHARED subproject1 subproject2)不能按预期工作(它本质上创build一个空的库&不注册依赖关系正确) CMake中有一个OBJECT库特性,但是我不认为它的目的是真正做我想做的事情。 有什么想法吗?
我怎么能告诉,像objdump ,如果一个对象文件已经build立了-fPIC ?
我试图将静态库链接到共享库,我得到以下错误 / usr / bin / ld:../../../libraries/log4cplus/liblog4cplus.a(fileappender.o):重新定位R_X86_64_32S在创build共享对象时不能使用“本地符号”; 用-fPIC重新编译 ../../../libraries/log4cplus/liblog4cplus.a:无法读取符号:错误值 collect2:ld返回1退出状态 但是这在32位机器上工作没有任何这样的错误。 我尝试手动添加-fPIC标志到Makefile也没有解决问题 我尝试了这里build议的-whole-archive标志,但没有成功。 / usr / bin / ld:../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o):重新定位R_X86_64_32S针对vtable for log4cplus :: spi :: AppenderAttachable不能用于制作共享对象; 用-fPIC重新编译 ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o):无法读取符号:错误的值 collect2:ld返回1退出状态 创buildliblog4cplus.a: unzip log4cplus-1.1.0.zip ./configure –enable-static=yes –enable-threads=yes vi Makefile并将-fPIC添加到CXXFLAGS和CFLAGS make 然后编译我的共享库: g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp g++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,–whole-archive "../../../libraries/log4cplus/liblog4cplus.a" […]
/usr/local/libsearch共享库吗? 我有这个错误: [Leo@chessman ~]$ whereis ffmpeg ffmpeg: /usr/local/bin/ffmpeg [Leo@chessman ~]$ ffmpeg ffmpeg: error while loading shared libraries: libavcore.so.0: cannot open shared object file: No such file or directory [Leo@chessman ~]$ ls /usr/local/lib/libav* /usr/local/lib/libavcodec.a /usr/local/lib/libavfilter.a /usr/local/lib/libavcodec.so /usr/local/lib/libavfilter.so /usr/local/lib/libavcodec.so.52 /usr/local/lib/libavfilter.so.1 /usr/local/lib/libavcodec.so.52.108.0 /usr/local/lib/libavfilter.so.1.74.0 /usr/local/lib/libavcore.a /usr/local/lib/libavformat.a /usr/local/lib/libavcore.so /usr/local/lib/libavformat.so /usr/local/lib/libavcore.so.0 /usr/local/lib/libavformat.so.52 /usr/local/lib/libavcore.so.0.16.1 /usr/local/lib/libavformat.so.52.94.0 /usr/local/lib/libavdevice.a /usr/local/lib/libavutil.a /usr/local/lib/libavdevice.so /usr/local/lib/libavutil.so /usr/local/lib/libavdevice.so.52 /usr/local/lib/libavutil.so.50 /usr/local/lib/libavdevice.so.52.2.3 […]