当ld-linux解析一个符号时,它会以特定顺序搜索共享库,并在找到具有匹配符号的共享库时停止。是什么决定了它在库中搜索的顺序?如果未解析的符号在主程序中或在另一个共享库中,会有什么不同吗?如何在不调用ldd等外部程序的情况下以编程方式确定搜索顺序? 最佳答案 来自http://www.muppetlabs.com/~breadbox/software/ELF.txt(如sarnold所述):Whenresolvingsymbolicreferences,thedynamiclinkerexaminesthesymboltabl
我看过.so是一个动态库文件,.a是一个静态库文件。在构建openssl时,我选择了./Configureno-shared并且它创建了很多.a文件。所以,我的问题是像apache这样的其他包是否能够使用来自openssl的.a文件?例如libcrypto.a,如果我完全走错了路,请有人给我建议。 最佳答案 基本上,静态库可以在链接时被编译到另一个应用程序。在您的示例中,Apache可以在构建期间使用libcrypto.a并将其包含在Apachehttpd应用程序中。动态.so库可以在运行时加载和卸载,您可以更灵活地更改Apache
我在linux(ubuntu13.10)上运行一个项目,它使用连接到设备的原始套接字。这是我的代码:/*builedsocket*/if((sockfd=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL)))==-1){perror("listener:socket");return-1;}/*Setinterfacetopromiscuousmode*/strncpy(ifopts.ifr_name,ifName,IFNAMSIZ-1);ioctl(sockfd,SIOCGIFFLAGS,&ifopts);ifopts.ifr_flags|=IFF_
在Linux中,对于共享库,我通常会看到一个库的.so、.so.1和.so.1.0文件。例如库test应该由libtest.solibtest.so.1libtest.so.1.0文件呈现。据我了解,.so.1.0包含真实数据;.so链接到.so.1.0并用于链接。但我不明白.so.1文件的用途。有人可以澄清.so.1文件的用途吗?谢谢。 最佳答案 假设我们正在谈论libtest.如果环顾四周,您会看到libtest.so,这是指向libtest.so.1的链接,它又链接到libtest.so.1.5.使用libtest的可执行文件
我正在尝试将相机库.so文件动态加载到Linux可执行文件中,以访问简单的相机功能。我试图通过以下方式做到这一点:if((newHandle=dlopen("./libCamera.so",RTLD_LAZY|RTLD_GLOBAL))==NULL){printf("Couldnotopenfile:%s\n",dlerror());return1;}但是这失败了,我收到以下输出:“无法打开文件:libCamera.so:undefinedsymbol:ZTVN10_cxxabiv117__class_type_infoE”我如何找出它所依赖的符号? 最佳答
我在Fedora24上运行matlabR2016a,但无法使用plot命令。这是我得到的错误:ErrorusinggcaWhilesettingthe'Parent'propertyof'Axes':Can'tload'/usr/local/MATLAB/R2016a/bin/glnxa64/libmwosgserver.so':/usr/local/MATLAB/R2016a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:version'CXXABI_1.3.8'notfound(requiredby/lib64/libGLU.so.
现在MATLAB2012a中的mex仅正式支持gcc4.4.6,但我想使用gcc4.7,风险自负。现在如果我直接用mex编译一些东西,它会提示/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:/usr/local/MATLAB/R2012a/sys/os/glnx86/libstdc++.so.6:version`GLIBCXX_3.4.15'notfound(requiredby/usr/lib/i386-linux-gnu/libppl_c.so.4)/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:/usr/local/
我最近不得不在Ubuntu系统上做一些小的编程(我是一个非常低级的初学者),我真的只是熟悉makefile。我注意到告诉链接器要包含哪些库的参数总是-l{libraryname},其中相应的库将是/usr/lib文件夹中名为“lib{libraryname}.a”的东西。我想知道:这是一个惯例吗?我原以为我需要键入-llibNAME才能找到名为libNAME.a的库,但它似乎假定有一个lib前缀。总是这样吗?我可以在不使用lib前缀的情况下命名库吗? 最佳答案 您可以任意命名,但是ld的-l假设一个lib前缀适用于静态库和共享库回到
我正在尝试使用qmake在Linux上构建一个动态库。这是我的.pro文件:TEMPLATE=libTARGET=sqxUiBaseQT+=coreguiCONFIG+=dllINCLUDEPATH+=../../public/includeDEPENDPATH+=.UI_DIR+=../GeneratedFilesRCC_DIR+=../GeneratedFilesCONFIG(release,debug|release){DESTDIR=../lib/releaseLIBS+=-L"../lib/release"MOC_DIR+=../GeneratedFiles/releaseO
我正在处理以前开发的软件,源代码被编译为linux共享库(.so),并且源代码不存在。有没有什么工具可以从linux共享库中提取源代码?谢谢,拉维 最佳答案 没有。编译代码后,二进制文件中不会留下任何痕迹,只有机器代码。有些人可能会提到反编译器,但它们不会提取源代码,它们会分析可执行文件并生成一些应该具有与原始代码相同效果的源代码。 关于c-如何从.so文件中提取C源代码?,我们在StackOverflow上找到一个类似的问题: https://stackov