腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
视频
沙龙
3
回答
动态加载静态库?
、
、
可以在运行时动态加载Linux中的静态libary *.a吗? 我读过 ...both静态库和共享库可以用作动态加载的库。 如何动态加载静态库?
浏览 6
提问于2010-09-02
得票数 9
回答已采纳
1
回答
什么是"Windows不支持适当的动态链接?“
、
、
、
我已经阅读了Linux dlopen()和dlsym()的文档,它们分别打开动态库并在库中加载符号。 这些调用似乎相当于Windows的LoadLibrary()和GetProcAddress()。 我在这篇文章中读到"Windows不支持适当的动态链接“:。 Linux和Windows动态库调用不同的原因是什么? Linux上的动态库能够在可执行文件中加载符号,这是唯一的区别吗?但是这意味着可执行文件也是Linux上的库,因为dlopen()在动态库上运行。
浏览 2
提问于2017-02-02
得票数 0
回答已采纳
1
回答
一次内存中只需要一个动态库的副本?
、
、
我读过关于动态库的。我听不懂下面这句话。 对于需要多个库的程序,共享库可以减少程序的内存占用(无论是在磁盘上还是在运行时的内存中)。这是因为多个程序可以同时使用一个共享库;因此,每次内存中只需要一个库的副本。 ld-linux.so的职责是执行重新定位过程(加载动态库等)。 ld-linux.so如何知道所需的库已经加载? 程序是如何共享的? 如果库已经更新了呢?新启动的程序是加载新程序还是使用驻留在内存中的程序?
浏览 8
提问于2013-10-08
得票数 3
回答已采纳
2
回答
在linux上加载多个类似的共享库
、
、
、
我正在编写创建“模型”的代码。模型是从XML文件创建的,其表示的一部分是动态生成的C代码。这段C代码被动态编译到一个动态加载的共享库中(使用POCO共享库类)。共享库主要包含小函数,模型创建的一部分是填充指向这些函数的函数指针。所有这些都运行得很好。然而,同时创建多个模型会导致问题。 我认为这与Linux上的动态加载如何工作有关,以及每个共享库都包含具有相同名称的函数的事实。这是PIC造成的吗?从共享库函数中检索数据时,问题本身并不明显。 因此,问题是,如何在linux上加载多个(数千个)共享库,其中包含相同的函数名? 上面的方法在windows上运行得很好,在windows中,动态加载的库数
浏览 0
提问于2013-03-01
得票数 4
回答已采纳
1
回答
动态库是在启动时加载的,还是只有在可执行文件需要时才加载?
、
、
、
、
以在Linux上运行的C应用程序为例,它与所需的共享库动态链接。 我知道.so文件应该在环境变量LD_LIBRARY_PATH中定义的路径中找到。 动态链接器是否在应用程序启动时加载此库?或者只能在需要从该库调用函数时才加载它吗?如果是后者,它如何才能真正知道哪个函数属于哪个库?
浏览 16
提问于2022-08-31
得票数 0
1
回答
是否有相当于Linux的dyld?
、
、
Mac为动态加载提供了一个有用的库,称为dyld。动态加载处理的许多有趣函数包括允许安装回调的函数,无论何时加载或卸载映像,dlopen和dlclose都将调用这些回调。这些函数分别是void _dyld_register_func_for_add_image(void (*func)(const struct mach_header* mh, intptr_t vmaddr_slide))函数和void _dyld_register_func_for_remove_image(void (*func)(const struct mach_header* mh, intptr_t vmaddr
浏览 3
提问于2013-03-29
得票数 3
1
回答
chgrp和链接库
、
、
、
根据/bin/chgrp上的linux命令,执行它的惟一必要库是libc.so。当使用gdb调试chgrp时,我注意到实际上加载了其他库,例如: /lib/x86_64-linux-gnu/libnss_compat.so.2 /lib/x86_64-linux-gnu/libnsl.so.1 /lib/x86_64-linux-gnu/libnss_nis.so.2 /lib/x86_64-linux-gnu/libnss_files.so.2 为什么这些库在ldd输出中不进行比较? 另外:它们在libc.so的动态部分没有比较,它们是如何定位和加载的?(我已经检查了libc.so的DYNA
浏览 3
提问于2015-06-29
得票数 0
回答已采纳
3
回答
在Windows上同时使用.so和.dll
、
、
、
我正在用C++在windows中编写一个程序,在这个程序中,用户可以编译动态链接库(windows)或共享目标文件(linux)形式的扩展。 在windows上,可以使用LoadLibrary函数加载动态链接库。在linux上加载.dlls,是否可以对windows上的.so文件执行同样的操作,反之亦然?
浏览 0
提问于2010-07-13
得票数 6
回答已采纳
1
回答
什么是cmake中的模块库类型?
、
、
cmake 文档说, 共享库是动态链接并在运行时加载的。模块库是没有链接到其他目标的插件,但可以使用类似dlopen的功能在运行时动态加载。 实际上,我可以看到SHARED和MODULE类型目标在Linux上生成.so动态库。.so库是动态链接的,在运行时加载并使用dlopen()进行映射。这两类目标有何不同?
浏览 9
提问于2017-04-18
得票数 10
2
回答
dlsym --获取重写的符号
、
、
、
、
我有一个动态加载库的应用程序,它动态加载库... 在Windows中,我可以遍历所有加载的模块,查找我感兴趣的符号。我不知道在Unix/Linux环境下该怎么做。我知道我可能会对前两个符号使用dlsym(dlopen(0, flag))或dlsym(RTLD_DEFAULT / RTLD_NEXT),并且知道要搜索的模块的顺序--我如何才能更深入地了解给定符号的所有定义?
浏览 1
提问于2011-11-30
得票数 4
1
回答
Linux内核如何动态地使用模块?
、
、
、
理解Linux内核说 内核在管理模块时有两个关键任务要执行。第一项任务是确保内核的其余部分能够到达模块的全局符号,例如其主函数的入口点。模块还必须知道内核和其他模块中符号的地址。因此,当一个模块被链接时,引用就会被一劳永逸地解析。第二个任务包括跟踪模块的使用情况,以便在另一个模块或内核的另一部分使用模块时不会卸载模块。一个简单的引用计数跟踪每个模块的使用情况。 任何共享库都可以动态链接(使用LD_LIBRARY_PATH)和动态加载(通过dlopen()、dlsym()和dlclose()),这是正确的吗? 模块是Linux内核的共享库吗? Linux内核如何动态地使用模块?是通过动态链接(使
浏览 0
提问于2018-10-17
得票数 0
回答已采纳
2
回答
在另一个DLL中动态加载DLL
、
、
我需要在另一个动态链接库(Visual C++ )中加载一个动态链接库,这样我就可以在第二个动态链接库中使用嵌入在第一个动态链接库中的类。我有这两个库的代码,因为我创建了两个dll,但我从来没有动态加载过库,所以我不确定这是如何完成的…… 此外,我想使这个多平台,我已经编译为.dll和.so,所以这将是一个伟大的平台无关的方法来做this...otherwise,我可以使用宏,以包括windows或linux特定的代码。 致以最良好的问候和万分感谢
浏览 4
提问于2010-11-24
得票数 2
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
回答
从zip、内存等加载动态库
、
、
是否有方法从zip文件、内存或自定义包文件加载动态库(so或dll)?还是我在浪费时间?关于这件事,我在网上找不到任何东西。 编辑澄清:我正在寻找一个运行时加载动态库使用LoadLibraryEx (对于dlopen )或dlopen(对于Linux)。我可以轻松地从目录加载对象,但我想知道是否有一种方法可以将共享/动态库放在ZIP文件中并从该文件中加载它。
浏览 2
提问于2014-01-17
得票数 0
回答已采纳
1
回答
是否可以在Mono中用DllImport加载ld-linux.so.2?
、
、
我需要在Linux中动态加载共享对象(以及将来的OS,但每次只加载一件东西),而实际上,试图在linux.so.2中使用DllNotFoundException总是会失败的。试图在C程序中加载它似乎也失败了(dlopen返回null)。 在没有DllImport的情况下,还有其他方法可以动态链接Mono中的库吗?
浏览 2
提问于2014-03-31
得票数 1
回答已采纳
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
回答已采纳
1
回答
在Mac OSX中加载和卸载共享库
如果这个问题以前在这个论坛上被重复了,我很抱歉。我有一个问题,在那里,加载和卸载dylibs不是如预期的Mac(特别是卸载部分)。问题是,如果我有一个可执行文件,如果我加载了一个共享库,比如A.dylib,然后使用加载的共享库来加载一个库,比如B.dylib。当我稍后尝试卸载库B.dylib时,没有返回错误代码(返回的int值是0-因为我使用常规的dlopen和dlclose函数来加载和卸载库,0表示卸载成功),但是当我检查以确保使用活动监视器或b.dylib的lsof仍然在内存中时。 现在我们正在为windows,linux和mac移植这段代码。Windows和Linux运行正常,但只有ma
浏览 2
提问于2012-10-17
得票数 5
回答已采纳
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
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
回答
从静态库linux C++中打开动态库
、
、
、
我有一个linux应用程序,它链接到静态库(.a),该库使用dlopen函数加载动态库(.so) 如果我将静态库编译为动态库并将其链接到应用程序,则dlopen将按预期的方式工作,但如果像上面所描述的那样使用它,它将不会工作。 静态库不能使用dlopen函数加载共享库吗? 谢谢。
浏览 2
提问于2013-07-25
得票数 2
回答已采纳
1
回答
解析共享库中的符号名(Linux)
、
、
、
我正在Linux中进行动态二进制分析。如果程序是动态链接的(加载时间链接),并且没有地址空间随机化,如果要调用标准库函数,我必须解析函数名。我在反汇编的代码中看到,调用标准库例程首先将分支到.plt部分的某个地址,其中PC正在加载那里计算的内存地址。顺便说一句,它是在ARM Linux,但一般的想法将是相同的,我想。 我是系统编程方面的新手。我不太了解库是如何链接的,地址是如何在运行时解析的。任何来自专家的想法都很感激。
浏览 2
提问于2012-09-13
得票数 1
1
回答
RPi交叉编译:如何链接动态库
、
、
、
我尝试交叉编译从一个x86_64窗口机器到一个Raspberry 4B运行Raspberry,我已经设法用我的工具链运行一个"hello world“。现在,我想要创建更复杂的程序,其中包括动态库,而我未能创建一个能够正确链接动态库的makefile。所需的所有库都可以在主机上和目标设备上使用。当我链接主机上的makefile时: LIBRARIES := C:/SysGCC/raspberry64/aarch64-linux-gnu/sysroot/lib/aarch64-linux-gnu/libdl.so.2 程序编译正确,但目标上的执行会产生错误:“加载共享库时出错:没有这样的
浏览 4
提问于2022-03-01
得票数 1
1
回答
真正的入口点是动态加载器中的Linux程序吗?如何在调用堆栈中显示它?
、
、
、
我认为使用共享库(不是用-static编译)的Linux程序的启动过程是: (1)在bash中输入可执行文件的名称。 (2) Bash读取可执行文件,发现它包含一个".interp“部分,其中包含动态加载程序的名称。 (3) Bash分叉一个新进程,在子进程中,执行动态加载程序,并将可执行文件的名称/路径作为参数传递给动态加载程序。但我不知道入口点是什么,在动态加载程序中没有"_start“,即/lib64 64/ld-linux-x86-64.so.2。 (4)从Linux内核返回到用户模式后,--在用户模式下执行的第一条指令--应该是动态加载程序的入口点。 (5)动态加载器
浏览 5
提问于2021-04-08
得票数 1
回答已采纳
2
回答
如何处理共享库或dylib中未定义的符号?
、
、
、
、
我有一个用于linux的Makefile,我正在移植到达尔文。makefile接受一堆.o文件,并将它们链接到一个.so共享对象中。好吧,所以我想(我错了吗?)达尔文对此最好的模拟方法是动态库。因此,我将-shared标志更改为-dynamiclib。 现在,我要链接到dylib的代码依赖于大量的外部库。当我试图构建dylib时,我会收到错误,说明存在未定义的引用。但是Linux没有在创建-lwhatever文件的构建步骤中指定任何.so或-L/path/任何选项。嗯?这是因为在创建ELF .so文件时,默认情况下它会使外部引用得不到解决,然后当加载共享库时,它会递归地加载要加载的共享库所依赖
浏览 2
提问于2010-09-12
得票数 19
1
回答
在libc.so.6中找不到stat方法。
、
、
、
、
使用Dart,我尝试动态加载linux/posix 'stat‘函数。 我假设函数在libc.so.6库中,但是当我试图加载它时,会得到错误: Invalid argument(s): Failed to lookup symbol (/lib/x86_64-linux-gnu/libc.so.6: undefined symbol: stat) 我正在从libc.so.6库成功地加载其他函数,所以我的动态加载技术是正确工作的。 我有两个理论: stat是xstat的宏,因此stat不再存在。 理想情况下,我希望使用stat而不是xstat,因为我需要这段代码也可以在osx上工作,据我
浏览 5
提问于2021-05-05
得票数 2
回答已采纳
2
回答
如何检测当前进程中动态库(共享对象)的大小?
、
、
、
我们可以使用获取Windows平台上加载的动态库的信息,包括其基本地址和大小。而且,可以以地址作为输入,并返回模块的句柄。因此,基本上,从地址获取动态库的基础和大小是可以访问的。 我对类似UNIX的平台还不太了解(包括Linux、macOS、iOS、Android等等)。如何在这些平台上进行相同的操作?不返回大小信息。
浏览 11
提问于2022-02-19
得票数 1
1
回答
在不同的.so中总是内联函数
、
、
、
、
在Linux中,如果我将动态库中的函数声明为gcc,然后动态加载该库,则该函数会被动态链接器内联吗? 我正在编译-O3中的动态库,并且没有传递任何链接时间优化标志-flto。 真正的问题是:当一个函数从另一个库中被调用时,它是否值得像往常一样在动态库中声明它呢?
浏览 9
提问于2017-07-25
得票数 1
回答已采纳
1
回答
如何在golang中调用Linux/UNIX系统调用
、
出于某些原因,我需要调用系统的一些系统调用(Linux)--我检查了'syscall‘包的文档,却找不到有关它的任何信息。 然后我看到了一个项目(),它封装了windows。我读了一下它的源代码。 它用 modkernel32 = syscall.NewLazyDLL("kernel32.dll") 加载动态库。但是,没有关于函数NewLazyDLL()的文档 我确信Linux/UNIX应该有类似的功能。有没有人能告诉我函数的名称,或者如何调用Golang中的Linux系统调用,或者从libc.so加载函数? 详细信息 我想调用系统调用‘守护进程’或‘叉’(我想去守护进
浏览 13
提问于2013-03-27
得票数 6
1
回答
当我的可执行程序在Linux上使用时,如果我更改了C++动态共享库,会发生什么?
、
、
、
、
我在Linux上有一个C++动态共享库abc.so,我的可执行程序用dlopen动态加载它,然后在使用rm + cp的情况下使用rm + cp覆盖一个新版本,但是有时也会出现coredump,但我意识到这可能与动态共享库上加载的延迟有关,但我无法确认,任何人都可以帮助我找出为什么?非常感谢!
浏览 4
提问于2019-09-19
得票数 3
回答已采纳
2
回答
C++中的崩溃恢复
、
、
、
我在Linux环境中有一个用C++编写的应用程序。应用程序在运行时动态加载库(共享对象)。(应用程序获得用户命令,它将执行逻辑来动态加载所需的共享库。) 在共享库中发生崩溃或分段故障时,是否有任何方法防止应用程序崩溃和退出? 我希望我的应用程序是活动的,并向用户报告崩溃。
浏览 3
提问于2013-12-31
得票数 4
回答已采纳
3
回答
在Linux下,C++源代码如何成为可执行文件或静态/动态库。以及程序在运行时如何加载到内存中
、
、
我知道源代码可以编译并链接到共享/静态库或ELF可执行文件。当程序运行时,它加载到内存中,并根据ELF格式创建过程映像。但我不确定加载共享库的程序是如何运行的。链接器如何在外部库中查找符号以及.a归档如何工作。如果程序在64位操作系统上运行,我还应该知道什么? 我正在试着画一幅完整的图画。有没有人可以简单介绍一下整个事情,并给出参考资料/文档/链接,这样我就可以逐一研究它们了。 提前谢谢。 我想我的问题可以这样描述: 在Linux下,C++源代码如何成为可执行文件或静态/动态库。以及程序在运行时如何加载到内存中。非常详细的介绍! 我可以使用多少工具来检查/操作Linux二进制文件(可执行文件和
浏览 0
提问于2012-02-29
得票数 1
回答已采纳
1
回答
什么是未定义的符号: X509_EXTENSION_free?
、
我尝试在linux上创建一个使用openssl的库。当我试图加载这个动态链接库(linux上的*.so)时,我得到了"undefined symbol: X509_EXTENSION_free“作为错误。我有点困惑这是Openssl的问题还是我的代码实现的问题。
浏览 1
提问于2012-04-25
得票数 0
回答已采纳
1
回答
特定于平台的库的运行时或编译时?
、
、
、
、
我正在用C++创建一个库。它针对Windows上的Windows库和Linux上的Linux库进行链接。它是抽象的,一切都很好。 然而,如果它在LLVM JIT下运行,那么动态检测、加载和使用库(以及复制头文件以供使用)是否可行,以便它可以在任何平台上使用?
浏览 4
提问于2010-10-14
得票数 1
回答已采纳
3
回答
列出在Linux上使用C/C++执行的程序中的共享库
、
、
我想知道在Linux上执行C/C++程序时加载了哪些动态库。 例如, int main() { ... list = GetAllSharedLibraryFilePaths(); } 列表应包含: libm.so.6,librt.so.1,...或者路径: /lib/x86_64-linux-gnu/libm.so.6、/lib/x86_64-linux-gnu/librt.so.1 ... 是否有返回所有共享库文件路径的API?我知道ldd,readelf可以做到这一点,但我需要在加载共享库的可执行文件中使用C/C++编程来做到这一点。 谢谢。
浏览 7
提问于2019-12-10
得票数 2
2
回答
当连接到动态共享库时,ld会做什么?
、
、
、
当将应用程序与动态共享库链接时,如 gcc -o myprog myprog.o -lmylib 我知道链接器(我的Linux上的ld)使用-l选项在生成的myprog可执行文件中存储库的名称(在本例中是mylib),这个库将在加载和链接时使用(如果忽略惰性动态链接,程序将在何时启动)。我想知道ld对动态共享库所执行的其他任务(我只是指编译时完成的静态链接步骤)? ld必须检查所提供的动态共享库中是否存在未定义的符号。 还有其他的东西吗? 此外,我将对您使用的关于ELF格式和动态链接和加载过程的指针(书籍、在线文档)感兴趣。
浏览 2
提问于2013-11-01
得票数 3
回答已采纳
2
回答
使用JNI加载动态C共享库,该库还加载另一个共享库
、
、
、
、
使用Java (Linux)上的JNI,我正在加载一个名为first.so的动态共享库。到目前为止一切都很顺利。问题是,first.so还加载了一个名为second.so的动态库。 在运行程序时,我会收到许多与second.so中的符号有关的“未定义符号”错误。 使用JNI加载的库似乎不能在运行时加载其他C库,因为我们是在Java环境中。我的假设正确吗?我是否需要特殊的编译标志来编译first.so库,还是需要特殊的参数来告诉eclipse它将在运行时尝试加载.so? 提前感谢!
浏览 3
提问于2014-02-07
得票数 6
1
回答
Android NDK不包含ltdl
、
、
我正在尝试为Android构建一个linux库,但是似乎android的libtool工具链中并没有包含动态加载器ltdl。这是与系统相关的原因,还是根本不存在? 如何将www.gnu.org/software/libtool/中的ltdl整合到android版本中? 谢谢!
浏览 3
提问于2011-09-17
得票数 1
2
回答
在OS X上使用C语言从dlopen()动态库访问主程序全局变量
、
、
、
我正在维护一个具有一些类似插件功能的,它是通过运行时加载的动态模块实现的。 具体地说,因为它是一个Gtk+应用程序,所以我使用的是gmodule,但这个问题也适用于基于dlfcn.h / dlopen()的动态库加载。 我的主程序有一个全局结构变量,用来保存一些全局信息。我希望这些信息对动态加载的插件中定义的函数可用。 在Linux上,我可以直接引用这个全局变量--它工作得很好,我猜是gcc或链接器负责将全局变量从主程序导出到动态库。 问题是,这在Mac OS X上是行不通的,有没有办法在OS X上做到这一点呢? 如果没有,有没有一种更“最佳实践”的方法来将全局信息暴露给动态加载的库?
浏览 3
提问于2009-12-20
得票数 8
回答已采纳
2
回答
加载共享库时未定义的符号
、
、
、
、
在我的程序中,我需要使用dlopen()动态加载共享库。程序和共享库都已成功地交叉编译为ARM体系结构,并在我的x86上安装了交叉编译器。但是,每当程序试图在ARM上运行时加载库时,它都会失败,从而导致以下错误: 未定义符号:_dl_hwcap 我找不到这个错误的罪魁祸首。 让我首先详细介绍共享库(libmyplugin.so)是如何构建在x86上的。我使用g++交叉编译器如下所示: /home/me/arm/gcc-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -march=armv7-a -mfloat-abi=hard -c -s
浏览 6
提问于2015-03-20
得票数 7
2
回答
关于C/C++静态库的推理
、
、
、
、
我从来没有想过下面的问题,但是因为我现在必须处理代码中的一堆依赖项,所以我想我最好把我的事实弄清楚。让我们将其限制在现代Linux版本,比如说ubuntu amd64。 既然静态库不包含动态库引用,那么如何在静态库中解析未定义的符号呢?依赖的二进制文件是否可以动态加载未定义的符号,或者必须在编译时由另一个静态库或目标文件解析这些符号? 编译器是否可以通过链接到动态库来解析依赖项(应用程序依赖于静态库),如果可以,代码文本是否会静态解析为结果二进制文件,或者是否存在动态引用? 例如,静态库L使用来自libc6.so的malloc,它将由应用程序A使用。L和A都会动态使用libc6.中的mallo
浏览 2
提问于2012-03-08
得票数 4
回答已采纳
4
回答
如何快速动态加载经常重新生成的c代码?
、
我希望能够动态生成C代码,并将其快速重新加载到我正在运行的C程序中。 我用的是Linux,怎么做呢? Linux上的库.so文件可以在运行时重新编译和重新加载吗? 是否可以在不生成.so文件的情况下对其进行编译,编译后的输出是否会以某种方式进入内存,然后重新加载?我想快速重新加载编译后的代码。
浏览 0
提问于2012-09-07
得票数 9
回答已采纳
2
回答
什么时候执行程序和共享库之间的动态链接?
、
、
、
在C中,在程序和共享库之间执行动态链接时: 一次将程序加载到内存中,但在执行程序的main()之前,或 在执行程序的main()之后,何时从库执行对例程的第一次调用?当第二次或第三次或.从库调用例程被执行了吗? 我一直在想第一条,直到我读到下面的引语,现在我不确定了。 不确定OS是否重要,我正在使用Linux。 从操作系统概念: 通过动态链接,每个库例程引用的图像中都包含一个存根.存根是一小部分代码,它指示如何定位适当的内存驻留库例程,或者如何加载库(如果该例程尚未出现)。 当存根被执行时,它检查所需的例程是否已经在内存中。如果不是,程序会将例程加载到内存中。无论哪种方式,存
浏览 2
提问于2018-06-10
得票数 2
1
回答
当在磁盘上更新动态库时,linux中会发生什么
、
、
当在磁盘上加载和更新动态库,然后启动一个链接到该库的新进程时,linux中会发生什么?新进程是否链接到内存中的旧副本或磁盘上的新版本?
浏览 1
提问于2011-04-23
得票数 2
1
回答
程序解释器在可执行文件中的作用是什么?
、
、
、
我正在进行小精灵可执行文件的分解和对精灵格式的理解。在那里,我看到lib64/ld-linux-x86-64.so.2在生成的可执行文件中用作程序解释器。 我的猜测是:我在源代码中使用了printf,它必须是动态链接的。当我检查动态部分时,我能够找到对libc.so.6共享库(tag:DT_NEEDED)的引用。在我的系统中,我在不同的目录中找到了多个具有该名称的文件: sourav@ubuntu-VirtualBox:/$ sudo find / -name libc.so.6 /usr/lib/x86_64-linux-gnu/libc.so.6 find: ‘/run/user/1000
浏览 9
提问于2022-02-13
得票数 0
回答已采纳
1
回答
在Python中加载两个动态库实例
、
、
、
我有一个用Fortran编写的程序,并编译(用-fPIC)作为一个动态库。我在Python中加载了CDLL来执行一些数值计算。库使用内部持久内存(在模块中)保存中间值。我同时在Windows和Linux上工作(分别使用.dll和.so )。动态库打包在Python模块中,并安装在lib子目录中。 如果我运行在同一台计算机上加载动态库的两个不同的Python脚本,它们会得到一个单独的内部内存还是会访问相同的内部内存(从而破坏结果)? 如果我: 将它们加载到不同的多处理实例中。 将它们加载到不同的多线程实例中。 将它们装入两台不同内核的木星笔记本中。 在不同的Python虚拟环境中
浏览 0
提问于2019-03-23
得票数 1
回答已采纳
1
回答
AWS上的SkiaSharp
、
我在AWS上部署了一个.NET核心3.0API。我正在使用SkiaSharp动态链接库。我知道这个错误: System.DllNotFoundException:无法加载共享库“libSkiaSharp”或其依赖项之一。liblibSkiaSharp:无法打开共享对象文件:没有这样的文件或目录。 我已经尝试过Skiasharp,skiasharp.NativeAssests.Linux,Avalonia.Skiasharp.NativeAsstes.Linux的nuget包,也尝试过Skiasharp.NativeAssets.Linux.NoDependencies,但是我仍然会遇到
浏览 6
提问于2020-07-28
得票数 1
1
回答
理解Linux中的动态库加载
、
、
、
我试图从这里1开始理解Linux中的动态库加载,并想澄清这个概念。具体来说,当在Linux环境中的进程中加载动态库时,它将在地址空间的任意点加载。现在,库有一个代码段和一个数据段。代码段的地址不是预先定义的,所以它是0x0000000,而对于数据段,一些数字被定义为地址。 但是这里有一个诀窍,这个数据段的地址实际上不是真正的地址。实际上,无论加载哪个位置代码段,数据段的预定义地址都会被添加到其中。 我说对了吗? 参考文章中还有一件事。这句话是什么意思? 但是,我们有一个约束,即共享库在每个进程中仍然必须有一个unqiue数据实例。虽然可以在运行时将库数据放在我们想要的任何地方,但这将需要留下重
浏览 4
提问于2014-03-20
得票数 2
回答已采纳
1
回答
如何在Linux中动态加载同名不同目录的库?
、
、
我不得不在Linux中动态加载.so,但我发现很难处理相同名称的库。我在不同的目录下有2个libtest.so,它们依赖于其他不同的库。我的程序读取配置文件来决定加载哪个libtest.so。例如: /usr/kyle/v1/libtest.so /usr/kyle/v2/libtest.so 它们都没有在ldconfig中注册。那么如何使用dlopen加载不同版本的libtest.so呢?我希望它们不会相互冲突,因为它们可能依赖于相同或不同的其他库。在我的程序中使用putenv/setenv更改LD_LIBRARY_PATH似乎不起作用。
浏览 1
提问于2013-05-13
得票数 2
1
回答
‘`execve()’如何调用特殊的启动例程和main()函数?
、
、
当C程序由内核通过execve()执行时, 在调用主函数之前,execve()在哪里调用一个特殊的启动例程crt0? execve()在哪里调用主函数? 我在https://elixir.bootlin.com/linux/latest/source/fs/exec.c找不到他们。 通过理解linker,execve()在内部查找一个linux_binfmt对象,该对象的load_binary()可以加载可执行文件并调用其load_binary()方法来加载它,还可以加载动态链接器来加载和链接可执行文件所使用的共享库。但书中并没有说明execve()如何从可执行文件调用程序的启动例程crt0和
浏览 0
提问于2019-02-02
得票数 2
1
回答
Rust库在目标armv7-linux-androideabi上崩溃
、
、
、
、
我的Dart/Flutter应用程序的代码与我的本机动态.so库进行通信,这对性能要求非常高。这个库是用Rust编写的。它可以很好地与目标aarch64-linux-android和x86_64-linux-android一起工作。当我使用目标armv7-linux-androideabi运行时,下面的代码行(Dart代码)崩溃。 final dylib = DynamicLibrary.open("libmyimportantlib.so"); 以下是错误消息:请注意,库中没有运行任何代码,一旦加载(或尝试加载),就会崩溃。 F/libc ( 7651): Fatal
浏览 0
提问于2021-05-08
得票数 1
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
相关
资讯
警惕利用Linux预加载型恶意动态链接库的后门
动态链接库DLL的加载:隐式加载和显式加载
如何在linux下安装 mysql数据库
C/C+编程笔记:C语言如何实现动态字符串?简单动态库!
Android 如何使用JNI构建wav转码amr的so动态库
热门
标签
更多标签
云服务器
ICP备案
实时音视频
即时通信 IM
对象存储
活动推荐
运营活动
广告
关闭
领券