腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
视频
沙龙
1
回答
Unix/Linux环境中的动态链接类型
、
、
、
在创建windows静态库时,我们只需创建一个应该包含在链接器路径中的.lib文件。 在创建windows共享库以及.dll时,我们还生成了一个.lib文件。这个lib文件包含由库公开的API的签名。 有两种使用此库的方法 我们可以直接引用项目中的库API,并在链接器属性中将路径添加到.lib文件中。有些人称它为静态链接动态库。 或者,我们可以在运行时显式加载动态库。在这种情况下,我们不需要为链接器指定lib文件路径。调用它动态链接的动态库。 我的问题是,对于Linux上的共享库,我们也有类似的东西吗?或者仅仅是静态库(.a)和共享库(.so)? 我知道如何使用gcc -l选项在linux上包
浏览 0
提问于2014-11-19
得票数 2
回答已采纳
1
回答
什么是"Windows不支持适当的动态链接?“
、
、
、
我已经阅读了Linux dlopen()和dlsym()的文档,它们分别打开动态库并在库中加载符号。 这些调用似乎相当于Windows的LoadLibrary()和GetProcAddress()。 我在这篇文章中读到"Windows不支持适当的动态链接“:。 Linux和Windows动态库调用不同的原因是什么? Linux上的动态库能够在可执行文件中加载符号,这是唯一的区别吗?但是这意味着可执行文件也是Linux上的库,因为dlopen()在动态库上运行。
浏览 2
提问于2017-02-02
得票数 0
回答已采纳
3
回答
动态加载静态库?
、
、
可以在运行时动态加载Linux中的静态libary *.a吗? 我读过 ...both静态库和共享库可以用作动态加载的库。 如何动态加载静态库?
浏览 6
提问于2010-09-02
得票数 9
回答已采纳
1
回答
``dlopen()‘通过调用动态链接器’`ld linux.so‘执行动态链接吗?
、
CSAPP说 Linux系统为动态链接器提供了一个简单的接口,允许应用程序在运行时加载和链接共享库。#包括 void *dlopen(const *filename,int标志);返回:指针来处理如果确定,如果错误为NULL dlopen()是否通过调用动态链接器ld-linux.so来执行动态链接? ld-linux.so是dlopen()调用来执行动态链接的动态链接器吗? 谢谢。
浏览 0
提问于2020-09-27
得票数 0
回答已采纳
4
回答
Linux: C/C++标准库静态与动态链接
、
、
、
、
在任何操作系统上都可能静态或动态地编译C++/C标准库。在Windows上,我总是喜欢静态构建,因为它有助于避免在特定的Windows版本、版本和服务包上安装或未安装不同版本的库的"dll地狱“问题。静态链接使软件更易于移植,更少依赖最终用户对其操作系统所做的操作(我甚至看到了一些示例,当最终用户可以在system32中的一些dll上创建dll时,他无法解释为什么,或者当用户声称我的应用程序包含病毒,因为它试图从官方微软网站下载动态链接的先决条件时……)所以,在我的经验中,在Windows上静态链接通常比动态链接更好。然而,我对Linux并不熟悉,所以任何人都能分享他的经验吗?我的问题
浏览 4
提问于2014-02-19
得票数 6
回答已采纳
3
回答
Visual C++:什么是动态链接的.lib文件?
、
、
我注意到关于我使用的一个库的如下内容: 库被编译为.lib文件。 我的代码需要编译为多线程(Debug) DLL来链接到这个库。 我打开库的.sln (解决方案)文件(它是开源的),并在它的项目属性中看到以下内容 运行时库选项设置为多线程(调试) DLL. 配置类型设置为静态库(.lib) 我的困惑是: 上面的库选项中没有冲突吗?(静态库表示一个选项,DLL表示另一个选项) 什么动物是.lib,是动态链接?它与DLL有何不同? 注意,我意识到了Linux世界中静态库和动态库之间的区别。
浏览 2
提问于2010-02-12
得票数 0
4
回答
为什么要使用显式参数进行静态和动态链接
、
、
我主要在Windows上工作,最近我开始在Linux上工作。我有个疑问。我在Windows中使用Visual Studio作为IDE,在Linux中使用Makefile。 Windows中有两种类型库:静态库(.lib)和动态链接库(VC++)。这很明显(不是吗?)如果我链接lib文件,我使用静态链接,否则使用动态链接。 现在,当我使用g++编译器时,为什么我需要显式地提到-Bstatic/-static或Bdynamic/-dynamic标志。因为如果文件是.a文件,那么我必须使用静态-linking,如果文件是.so,则我使用动态链接。
浏览 3
提问于2012-12-24
得票数 3
回答已采纳
1
回答
zOS中的动态链接
、
我必须在zOS中创建一个动态链接库。要传递给编译器的选项有哪些。 另外,如何检查zOS中的库是否动态链接依赖于其他库。我们在linux中有ldd,它显示了这种联系。我们在zOS的土地上有'ldd‘的等价物吗?
浏览 0
提问于2010-12-09
得票数 5
回答已采纳
4
回答
g++问题:未捕获异常
、
、
、
情况是,我有一个用C++编写的动态库,它由另一个动态库包装,也是用C++编写的(具体地说,是由SIP生成的)。第一个动态库定义了一个函数do_raise,该函数抛出一个异常RaiserError,它是std::exception的子类。第二个动态库在包装Python中,它试图捕获RaiserError,以便将其转换为do_raise异常。 使用Visual C++构建,一切都按预期工作,并且RaiserError被正确捕获。但是,在Linux上使用g++时,RaiserError不会被捕获。如果我尝试捕获std::exception (RaiserError的基类),它可以工作。这里出了什么问
浏览 2
提问于2009-09-22
得票数 3
2
回答
在Cocoa应用程序中使用哪一个更好:动态库还是静态库?
、
、
、
、
我需要在Cocoa应用程序中使用库,并且可以使用它的动态(.dynlib)或静态(.a)版本。我来自Linux世界,我很乐意使用dynlib。然而,由于应用程序包将包含所有依赖项(包括dynlib),我认为由于静态链接而拥有更大的二进制文件不是问题。最佳解决方案是什么?
浏览 0
提问于2011-11-18
得票数 3
回答已采纳
1
回答
动态共享库--用于linux
、
我只有一个关于Linux共享库文件的问题。 我看到了许多与LinuxO.S 的动态共享库相关的链接 在上面的链接中提到了--包括库的文件: ctest.h 现在在LINUX中使用libdl构建函数-- dlopen,dlsym,dlclose。 我们真的需要为动态图书馆包括原型文件ctest.h吗? 请对以上职位提出一些建议。
浏览 7
提问于2012-12-02
得票数 2
回答已采纳
2
回答
Boost日志和动态加载库
、
我们在我们的应用程序中使用Boost.Log v2 (1.70),该应用程序可用于Windows和Linux。最近,我重构了一个动态加载的动态链接库,以便也使用Boost.Log。 dll导出C函数以访问专用硬件。它用于各种编程环境: C、C++、Python和Labview。(其中大多数不使用Boost.Log)。 对于Windows,构建dll的目的是只使用静态库和使用静态运行时,这使得部署变得更加容易。 这与预期的一样:两个boost日志实例似乎完全独立于彼此。该应用程序登录到它的文件接收器,dll进入另一个。 在Linux上,构建插件是为了使用共享运行时和共享boost库。我们故意这样
浏览 6
提问于2020-10-27
得票数 2
回答已采纳
1
回答
我们可以在窗口上使用.so文件吗?
、
、
、
我需要在windows和linux平台上为我的c++代码库动态创建和链接库。我知道DLL格式适用于windows,而.so则用于linux平台。但是我读到.so也可以在windows平台上链接。我的问题是,我能否创建一个通用动态库(.so)来在windows和linux上运行我的应用程序?如果是,怎么做?
浏览 3
提问于2016-01-18
得票数 1
回答已采纳
1
回答
Linux内核如何动态地使用模块?
、
、
、
理解Linux内核说 内核在管理模块时有两个关键任务要执行。第一项任务是确保内核的其余部分能够到达模块的全局符号,例如其主函数的入口点。模块还必须知道内核和其他模块中符号的地址。因此,当一个模块被链接时,引用就会被一劳永逸地解析。第二个任务包括跟踪模块的使用情况,以便在另一个模块或内核的另一部分使用模块时不会卸载模块。一个简单的引用计数跟踪每个模块的使用情况。 任何共享库都可以动态链接(使用LD_LIBRARY_PATH)和动态加载(通过dlopen()、dlsym()和dlclose()),这是正确的吗? 模块是Linux内核的共享库吗? Linux内核如何动态地使用模块?是通过动态链接(使
浏览 0
提问于2018-10-17
得票数 0
回答已采纳
1
回答
什么时候在iOS中使用动态链接库?在iOS中使用动态库的优点是什么?
、
、
、
对于动态链接库、窗口中的和Linux与iOS之间的优势之间的区别,我感到很奇怪。 下面的⬇️句子是为了证明我为什么感到奇怪。 我了解到库可以分为静态库和动态库。 使用动态库的优点是允许其他应用程序使用相同的动态库( in Window,.dll file),这样可以减少每个应用程序的内存使用量,并且可以更容易地重新分发动态库而不是重新分发应用程序。实际上,在使用一些应用程序时,我可以体验到“没有XXX.dll文件”。 在Xcode中,当创建新项目时,我们可以选择框架和framework & library中的静态库。在创建项目后,我们可以选择如何成为Mach-O型的“可执行、动态库、静
浏览 4
提问于2021-04-21
得票数 2
回答已采纳
1
回答
与动态库链接导致的可执行运行时崩溃
、
、
、
、
堆栈:使用GNU编译和链接的MIPS、Linux、C、C++ (基于x86的MIPS) 公平警告:我是一个C,C++新手,可以自由地提出任何可能很明显的建议,因为我可能还没有尝试过。 我能够构建一个动态链接到库(live555)的可执行文件,如果我静态地链接到这个库,那么一切都能正常工作,但是当我尝试在运行时动态链接可执行文件崩溃时。为了确认我正在正确构建.so文件,我还尝试构建其他可执行文件(live555中包含的测试工具),以动态链接到这些.so库,并且这些工具可以正常工作。 链接/构建似乎运行良好,在构建过程中不会引发错误或警告。我可以用readelf -d检查崩溃的可执行文件,并清楚地
浏览 4
提问于2013-12-20
得票数 3
回答已采纳
1
回答
在windows到linux项目转换中绕过__declspec(dllimport)
、
、
我正在将一个visual studio c++框架转换成一个linux版本,在消除对windows的依赖的过程中,我在一些头文件中遇到了一大堆__declspec(dllimport)调用。这些头文件定义了一堆在源文件中使用的函数和类,因此它们是构建所需的。 下面是使用__declspec()调用的确切代码行。 #ifndef UeiDaqAPI #define UeiDaqAPI __declspec(dllimport) #endif UeiDaqAPI是所有源文件使用的类和函数的集合。据我所知,declspec调用将当前.h文件中定义的函数/类链接到动态库"UeiDaq
浏览 91
提问于2020-01-13
得票数 0
2
回答
强制动态链接库
、
、
、
、
我从彼得·范德尔·林登( Peter Van Der Linden )的“专家C编程:深层C秘密”一书中了解到,有些特定的库是必须进行动态链接的;哪些是这些库,以及它们为什么强制动态链接?(更具体地说,在GNU/Linux系统上)
浏览 4
提问于2011-03-14
得票数 3
2
回答
静态库链接两次
我有以下设置: 静态库 链接到(1.)的动态库。 链接到(1.)的可执行文件。和(2.) 来自from静态库的代码现在被复制并呈现在动态库和可执行文件中。 问题: 数据(全局变量、静态类成员)是否也重复,可执行文件和dll是否看到相同的数据? Linux和Windows之间有什么区别吗? 你怎么解决这个问题? 编辑: 谢谢你的回答,我现在可以准确地解释我的情况了。 静态库没有导出/导入标志。动态图书馆有自己的符号导出。 Windows: 动态库有静态库的text+data段的副本。可执行程序不知道,动态库已经链接了静态库,因为静态库符号的非从外部可见。 Linux: 动态库
浏览 6
提问于2015-07-03
得票数 9
回答已采纳
1
回答
在JNI中链接静态库
、
我是JNI的新手。 我想将一个静态库(比如libFoo.a)链接到我正在创建的动态库中。这个动态库是从我的Java类调用的。 这个是可能的吗?如果是这样的话,是怎么做的? gcc -I$JAVA_DIR/include -I$JAVA_DIR/include/linux -o libXY.so -shared jni/xy.c libFoo.a
浏览 0
提问于2013-04-21
得票数 1
回答已采纳
2
回答
在另一个DLL中动态加载DLL
、
、
我需要在另一个动态链接库(Visual C++ )中加载一个动态链接库,这样我就可以在第二个动态链接库中使用嵌入在第一个动态链接库中的类。我有这两个库的代码,因为我创建了两个dll,但我从来没有动态加载过库,所以我不确定这是如何完成的…… 此外,我想使这个多平台,我已经编译为.dll和.so,所以这将是一个伟大的平台无关的方法来做this...otherwise,我可以使用宏,以包括windows或linux特定的代码。 致以最良好的问候和万分感谢
浏览 4
提问于2010-11-24
得票数 2
2
回答
当连接到动态共享库时,ld会做什么?
、
、
、
当将应用程序与动态共享库链接时,如 gcc -o myprog myprog.o -lmylib 我知道链接器(我的Linux上的ld)使用-l选项在生成的myprog可执行文件中存储库的名称(在本例中是mylib),这个库将在加载和链接时使用(如果忽略惰性动态链接,程序将在何时启动)。我想知道ld对动态共享库所执行的其他任务(我只是指编译时完成的静态链接步骤)? ld必须检查所提供的动态共享库中是否存在未定义的符号。 还有其他的东西吗? 此外,我将对您使用的关于ELF格式和动态链接和加载过程的指针(书籍、在线文档)感兴趣。
浏览 2
提问于2013-11-01
得票数 3
回答已采纳
2
回答
什么是链接器,什么是动态链接中的加载程序?
、
、
CSAPP (3ed)在p733中说 7.9加载可执行对象文件要运行可执行对象file prog,我们可以将其名称键入到Linux的命令行: linux> ./prog,因为prog不对应于内置的shell命令,因此shell假定prog是可执行对象file,它通过调用一些内存驻留操作系统代码(称为the加载器)为我们运行。任何Linux程序都可以通过调用execve函数来调用加载程序,我们将在8.4.6节中详细描述该函数 在p736中:动态链接 7.10动态链接到共享库之后,我们将把它链接到图7.7中的示例程序: linux> gcc -o prog2l main2.c ./libv
浏览 0
提问于2020-09-27
得票数 -1
7
回答
在Linux上使用静态链接的应用程序有什么缺点吗?
、
、
、
我在这里看到了几个关于这个主题的讨论,但我想问一下我的特殊情况: 如果我有一些我的应用程序正在使用的第三方库,我想将它们链接在一起,以省去在LD_LIBRARY等方面的麻烦,那么在Linux上,除了更大的文件大小之外,它还有什么缺点吗? 另外,是否可以只静态链接一些库,而将其他库(标准Linux库)动态链接? 谢谢。
浏览 7
提问于2009-05-19
得票数 2
1
回答
gcc代码::块共享库问题
、
、
、
、
我与gcc编译器一起使用了代码::linux系统上的块,我希望能够使用共享库模板来创建一个具有类的共享库,然后再创建另一个项目来访问该共享库(在编译时,而不是动态地)和类。 我确信代码::块有简单的方式来完成这个,而不需要制作定制makefile和手动设置链接选项,但是我不知道怎么做。我该怎么做。 共享图书馆 sl.h class clsClass { public: static bool bolReturnTrue(char * chWhatever); }; sl.cpp bool clsClass::bolReturnTrue(char * chWhatever) {
浏览 0
提问于2010-01-29
得票数 3
回答已采纳
1
回答
什么是cmake中的模块库类型?
、
、
cmake 文档说, 共享库是动态链接并在运行时加载的。模块库是没有链接到其他目标的插件,但可以使用类似dlopen的功能在运行时动态加载。 实际上,我可以看到SHARED和MODULE类型目标在Linux上生成.so动态库。.so库是动态链接的,在运行时加载并使用dlopen()进行映射。这两类目标有何不同?
浏览 9
提问于2017-04-18
得票数 10
1
回答
创建动态库时的问题
、
、
、
、
我正在编译带有标志a.c和b.c的文件-fstack-protector-strong,这将导致在对象文件a.o、b.o中引入新的符号__stack_chk_fail nm a.o | grep __stack_chk_fail U __stack_chk_fail nm b.o | grep __stack_chk_fail U __stack_chk_fail 我正在使用上面的对象文件创建一个静态库libstat.a: ar rc libstat.a a.o b.o 最后,我尝试使用上面的静态库创建动态库libtest.so。上述符号__stack_chk_fail是在gcc工具链路径/
浏览 19
提问于2022-08-21
得票数 2
1
回答
动态链接器是Linux系统上内核或GCC库的一部分吗?
、
、
动态链接器(又名程序解释器,Loader)是内核还是GCC库的一部分? 更新 (28-08-16): 我已经发现,每个二进制文件(即通过共享库链接)使用的动态链接器的默认路径是到共享库/lib64/ld-linux-x86-64.so.2的链接,而共享库/lib/x86_64-linux-gnu/ld-2.23.so是实际的动态链接器。 它是libc6 (2.23-0ubuntu3)包的一部分,即。中用于AMD64架构的ubuntu。 我的实际问题是 如果这个辅助程序(d-2.23.so)不存在,那么所有动态链接的应用程序(全部,现在是一天)会发生什么? 对此的回答是“应用程序将不运行,甚至s
浏览 0
提问于2016-08-09
得票数 9
回答已采纳
2
回答
关于C/C++静态库的推理
、
、
、
、
我从来没有想过下面的问题,但是因为我现在必须处理代码中的一堆依赖项,所以我想我最好把我的事实弄清楚。让我们将其限制在现代Linux版本,比如说ubuntu amd64。 既然静态库不包含动态库引用,那么如何在静态库中解析未定义的符号呢?依赖的二进制文件是否可以动态加载未定义的符号,或者必须在编译时由另一个静态库或目标文件解析这些符号? 编译器是否可以通过链接到动态库来解析依赖项(应用程序依赖于静态库),如果可以,代码文本是否会静态解析为结果二进制文件,或者是否存在动态引用? 例如,静态库L使用来自libc6.so的malloc,它将由应用程序A使用。L和A都会动态使用libc6.中的mallo
浏览 2
提问于2012-03-08
得票数 4
回答已采纳
1
回答
是否可以静态地将一些库(但不是所有库)链接到libtool?
、
我正在进行一个使用autoconf、automake和libtool构建的项目。该项目以二进制和源两种形式分发。 在Linux上,默认情况下构建脚本动态链接到所有库。这是有意义的,因为Linux用户可以依靠他们发行版的包管理器来处理依赖关系。 在Windows上,默认情况下,构建脚本链接到所有库,静态地使用libtool的-all-static选项。这是有意义的,因为Windows没有提供任何依赖项,并且能够分发包含所有依赖项的单个二进制文件,而不是浪费大量的DLL,这是很有帮助的。 在OSX上,一些依赖项是由操作系统提供的,而有些则不是。因此,动态地链接到OS提供的库和静态地链接到其他库将是
浏览 2
提问于2009-12-22
得票数 6
回答已采纳
10
回答
使用共享库与单个可执行文件
、
、
我的同事声称,我们应该将我们的C++应用程序(C++、Linux)分解成共享库,以提高代码的模块性、可测试性和重用性。 在我看来,这是一种负担,因为我们编写的代码不需要在同一台机器上的应用程序之间共享,也不需要动态加载或卸载,我们可以简单地链接一个单片可执行的应用程序。 此外,用C函数接口包装C++类会让它更难看。 我还认为单文件应用程序将更容易在客户的站点进行远程升级。 当不需要在应用程序之间共享二进制代码并且没有动态代码加载时,是否应该使用动态库?
浏览 0
提问于2009-09-16
得票数 8
回答已采纳
2
回答
如何将动态可执行文件转换为静态可执行文件?
、
、
如何在不从源代码重新编译的情况下将预先构建的动态可执行文件转换为静态可执行文件?我在Linux上使用ARMv7 cpu,并且我可以访问动态可执行程序所需要的库。(我不能使用Ermine或Statifier !)
浏览 1
提问于2013-10-17
得票数 2
1
回答
避免依赖项中的动态链接
我正在开发一个针对自定义linux的项目,并且我遇到了依赖项引用的动态dll的问题。 有没有办法预先知道依赖项是否有动态链接库?有没有可能以某种方式避开这些库?我想要一个静态二进制文件(MUSL对我不起作用,因为一个依赖项不能用它编译)。 谢谢
浏览 8
提问于2021-05-05
得票数 0
回答已采纳
1
回答
一个程序使用的多个共享库可以使用不同的静态链接libc吗?
、
、
、
、
在Windows上可以这样做(虽然不建议这样做,因为不同c库实例之间的pass标准库对象可能有问题),例如 每个可执行映像(EXE或DLL)都可以有自己的静态链接CRT,也可以动态链接到CRT。静态地包含在特定映像中或由特定映像动态加载的CRT版本取决于它所用的工具和库的版本。一个进程可以加载多个EXE和DLL映像,每个映像都有自己的CRT。 可以在Linux上完成吗? 是假的吗?但是像Linux这样的一般系统不应该有这样的限制,对吗?例如,如果代码库A和代码库B确实需要不同版本的libc才能很好地工作,并且假设它们都有非常简单的客户端C风格API (即在这些API中没有指针参数),那
浏览 5
提问于2021-04-08
得票数 0
1
回答
UPX是否神奇地将二进制文件从动态链接转换为静态链接的libarires?
、
、
、
、
我试图在gnu/linux amd64上使用静态库构建一个基于qt的软件,但没有成功(qt是成功地静态构建的)。 现在我看到有些人在使用UPX。因此,我尝试了动态构建,实际上,“file”命令将二进制文件识别为静态链接。我能相信吗?我应该考虑用统计员来代替吗? 提前感谢 编辑 抱歉,我说得不够清楚。我正在尝试使用QT框架构建一个应用程序,但是构建脚本很复杂,是为共享库创建的。我能够在二进制动态链接中构建应用程序,它可以工作,但我想获得一个带有静态链接库的二进制文件。我尝试了UPX软件(),就像我在其他主题上看到的那样,它用于将带有动态库的二进制转换为带有静态库的二进制。 但这对我来说太神奇了,
浏览 12
提问于2013-12-23
得票数 4
1
回答
ld.so是可执行的吗?
、
$ file /lib/ld-linux.so.2 /lib/ld-linux.so.2: symbolic link to i386-linux-gnu/ld-2.27.so $ readlink -f /lib/ld-linux.so.2 /lib/i386-linux-gnu/ld-2.27.so $ file /lib/i386-linux-gnu/ld-2.27.so /lib/i386-linux-gnu/ld-2.27.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically link
浏览 0
提问于2018-06-10
得票数 4
回答已采纳
1
回答
如何在Linux中从动态库(libsample.so)生成导入库(libsample.a)
在Linux上创建动态库之后,我希望从动态库(.so)生成一个导入库(.so)。我该怎么做呢?
浏览 4
提问于2010-08-05
得票数 5
2
回答
用gcc实现静态链接和动态链接
、
我最近一直在阅读有关静态和动态链接的文章,我了解了它们之间的区别,以及如何创建静态和动态库并将其链接到我的项目 但是,一个问题出现在我的脑海中,我无法回答它,也找不到答案,因为这是一个特定的问题…当我在linux上使用下面这行代码编译代码时 #include <stdio.h> int main() { printf("hello, world!\n"); } 使用此命令进行编译 [root@host ~]# gcc helloworld.c -o helloworld 这是什么类型的链接??所以stdio.h静态或动态地链接到我的项目?
浏览 0
提问于2017-08-03
得票数 0
2
回答
Linux:是否有可能使用静态链接的二进制文件进行一些面向插件的编程?
、
、
、
假设我们有一个非常小的嵌入式系统,它只包含linux内核和一个静态链接的二进制文件,作为init运行。我们希望二进制文件能够在运行时动态加载外部插件。 在linux上是可能的吗?Dlopen只适用于共享库和动态链接,因为静态二进制文件不会将任何符号导出到外部世界,所以还有其他方法可以做到这一点吗?
浏览 4
提问于2011-12-16
得票数 2
回答已采纳
1
回答
在不同的.so中总是内联函数
、
、
、
、
在Linux中,如果我将动态库中的函数声明为gcc,然后动态加载该库,则该函数会被动态链接器内联吗? 我正在编译-O3中的动态库,并且没有传递任何链接时间优化标志-flto。 真正的问题是:当一个函数从另一个库中被调用时,它是否值得像往常一样在动态库中声明它呢?
浏览 9
提问于2017-07-25
得票数 1
回答已采纳
1
回答
Linux中的应用程序和库之间使用什么IPC?
、
、
、
当您拥有依赖于库(动态链接)的Linux应用程序时,应用程序如何与库通信?使用了什么进程间通信方法?
浏览 0
提问于2023-01-15
得票数 1
2
回答
同时具有.a和.so的库-如何强制使用.a?
、
、
我正在写一个程序使用Qt Creator,在Linux上。它使用了一个库,对于这个库,我在/usr/lib目录中有.so和.a等效库,例如: /usr/lib/libuseme.a /usr/lib/libuseme.so 据我所知,如果我链接到.so,它将被动态链接,但如果我链接到.a,它将被静态链接。 在这种情况下,我想要静态链接,让我有更好的机会以一种自包含的方式分发我的程序。 但是链接器的-l选项只允许指定库名称,不包括lib或扩展名-例如 -luseme 那么,我如何表明我希望它链接(静态地)到.a,而不是动态地链接到.so
浏览 3
提问于2013-07-13
得票数 2
回答已采纳
1
回答
从静态库linux C++中打开动态库
、
、
、
我有一个linux应用程序,它链接到静态库(.a),该库使用dlopen函数加载动态库(.so) 如果我将静态库编译为动态库并将其链接到应用程序,则dlopen将按预期的方式工作,但如果像上面所描述的那样使用它,它将不会工作。 静态库不能使用dlopen函数加载共享库吗? 谢谢。
浏览 2
提问于2013-07-25
得票数 2
回答已采纳
1
回答
如何重新分发建立在现代Ubuntu上的二进制程序,以便它们可以在任何旧的Linux系统上执行?
、
、
我发现,如果我在Ubuntu10.10上构建任何二进制文件,那么它就不会在一些旧的Linuxes上执行。这是因为Ubuntu使用了一个非常新的C库,称为EGLIBC。大多数桌面Linux系统使用GLIBC。 我想知道是否有任何标准的方法,如何重新分发构建在现代Ubuntu上的二进制程序,以便在任何旧的Linux系统上执行它们? 如何找到所有必需的依赖项(glibc版本、动态库)?
浏览 0
提问于2011-01-12
得票数 3
回答已采纳
3
回答
C++动态库编译/链接
、
、
我知道,如果我将我的c++程序链接到用不同版本的Visual Studio构建的动态库(DLL),由于二进制兼容性问题,它将无法工作。(我在Boost库和VS2005和2008中经历过这种情况) 但我的问题是: MSVS的所有版本都是这样的吗?这是否也适用于静态库(LIB)?这也是GCC和Linux的问题吗?最后,如何在VS中链接到用MinGW构建的动态链接库? 顺便说一下,除了跨平台或跨编译器之外,为什么同一编译器(VS)的两个版本不能兼容?
浏览 1
提问于2011-04-23
得票数 3
回答已采纳
5
回答
默认情况下链接的库
、
、
我的代码正在测试中: int main(){ return 0; } 从它编译的可执行文件所依赖的动态共享库是: $ gcc -o test test.c $ ldd test linux-gate.so.1 => (0x00783000) libc.so.6 => /lib/libc.so.6 (0x00935000) /lib/ld-linux.so.2 (0x00ea5000) 我想知道这三个图书馆在扮演什么角色? main函数属于哪个库? /lib/libc.so.6? return属于哪个库? /lib/libc.so.6? 这三
浏览 25
提问于2011-08-06
得票数 6
回答已采纳
2
回答
发布linux软件兼容性
、
我想为Linux发布一个C++库。是否只有glibc版本决定与其他Linux发行版的兼容性(当没有其他库被动态链接时)? 在过去5年中,是否有更好的方法来支持大多数Linux发行版,而不是设置几台虚拟机并在那里编译呢?例如,在一个非常老的Linux系统上编译的Linux二进制文件会在新的Linux版本上运行吗?
浏览 0
提问于2015-05-25
得票数 2
回答已采纳
2
回答
编译到多个指令集时避免重复符号
、
、
我正在使用基于处理器特性的CPU调度来切换一个复杂的数值算法的实现。我想包含在同一个动态库中编译的两个版本(出于参数考虑,一个是sse2版本,另一个是sse3版本)。 到目前为止,所采用的方法是将所有特定于体系结构的代码包装到一个名称空间中,例如namespace sse2和namespace sse3,从而在链接到最终的动态库时避免重复的符号名称。 然而,如果我在sse2和ss3版本中都使用了一些我控制之外的代码(例如std::vector<int>),会发生什么呢?据我所知,std::vector实现将出现在sse2和sse3目标文件中,但理论上可能包含不同的指令,具体取决于编
浏览 0
提问于2015-05-28
得票数 6
2
回答
为什么没有更多地使用静态链接?
、
、
、
、
我理解动态链接的好处(旧代码可以利用库的自动升级,它更节省空间),但它肯定有缺点,特别是在异构的Linux生态系统中。由于系统升级破坏了向后兼容性或在共享库中引入了回归,这使得分发与分发无关的二进制文件变得困难,并且使以前工作的程序更有可能崩溃。 考虑到这些缺点,为什么动态链接似乎是如此普遍的首选?为什么很难找到静态链接的、与发行版无关的Linux二进制文件,即使对于小型应用程序也是如此?
浏览 4
提问于2011-08-25
得票数 10
回答已采纳
1
回答
swift包管理器链接动态库
、
、
、
、
我在linux上使用了swift,生成了包含一些库的Package.swift文件,但当我使用swift build命令构建项目时,这些库与可执行文件是静态链接的。我尝试使用swift package generate-xcodeproj命令生成一个Xcode项目,在Xcode中构建该项目,然后打开产品目录,我发现库与可执行文件动态链接,Xcode做了什么?我如何使用swift build命令将其构建为动态链接,您能帮助我使用??吗
浏览 9
提问于2017-03-13
得票数 0
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
相关
资讯
警惕利用Linux预加载型恶意动态链接库的后门
智能柜动态链接库 API SDK开发包
Linux库概念,动态库和静态库的制作,如何移植第三方库
动态链接库DLL的加载:隐式加载和显式加载
为什么需要动态链接?
热门
标签
更多标签
云服务器
ICP备案
对象存储
实时音视频
云直播
活动推荐
运营活动
广告
关闭
领券