问题内容: 假设我有一个非常简单的C文件(称为foo.c): 现在我叫gcc: 当我调用gcc时(如上例所示,没有选项),默认情况下链接了哪些库,它们位于何处?(在Mac OS X 10.7上) 问题答案: 该选项将导致它倾倒它会使用包括图书馆的路径和默认的库文件和目标文件将在被链接的默认选项的信息。 如果提供该选项,则gcc会将传递给链接器,该链接器将准确地转储其在查找库的位置,包括失败和成功搜
问题内容: 我有一个C ++项目,由于其目录结构被设置为静态库,因此链接到共享库中,而共享库又链接到可执行文件中。(这是使用CMake的一个跨平台的项目,所以在Windows上我们得到的,和,和在Linux上我们得到的,和)。图书馆有一个初始化函数(在定义),即从库调用的初始化函数(,在中定义),这是从的main 调用的。因此,在链接时,(以及中定义的所有符号)都被链接到(这是我们期望的行为)。
问题内容: 如何从库本身中获取共享库的路径? 换句话说,假设使用来加载库X ,如何从库本身内部访问用于加载所述库的路径? 请注意,我不能首先将这个库加载到该库中。 更新: 这是使用静态变量的方法: 问题答案: 动态链接器实际上搜索几个位置以找到每个动态库。其中包括(来自man ld.so): 环境变量给定的路径 烘焙到二进制文件中的路径将加载条目下的库 缓存文件/etc/ld.so.cache /
问题内容: 我正在x86 ubuntu机器上为树莓派ARM目标编写一些代码。我正在使用gcc-linaro- armhf工具链。我能够交叉编译并在pi上运行一些独立程序。现在,我想将代码与外部库(例如ncurses)链接。我该如何实现。 我应该将程序与主机上现有的ncurses lib链接,然后在ARM上运行吗?(我认为这行不通)我是否需要为arm获取lib的源代码或预构建版本,将其放在我的lib
问题内容: 我对共享库在Linux上的工作方式不了解。我试图了解应用程序如何在Linux上运行时解析同一共享库的不同修订版。 据我了解,共享库具有三个“名称”,例如, libmy.so.1.2(实名,即实际的obj文件) libmy.so.1(SONAME,嵌入在实际的obj文件中) libmy.so(链接器名称,在链接时提供给链接器,并嵌入在可执行文件中) 通过LDCONFIG安装库时,它将创建
问题内容: 我正在尝试在CentOS机器上做一个简单的操作,但是得到: 错误:访问https://github.com/org/project.git/info/refs时,请求的URL返回错误:401 致命:HTTP请求失败 它从不提示我输入用户名/密码,只是失败。 我可以在Mac上拨打完全相同的电话,没问题-我缺少什么? 问题答案: 答案很简单,但并不明显: 代替: 做: 或(不安全) (请注
问题内容: 我在Ubuntu(arm-linux-gnueabi- gcc)中有一个ARM交叉编译器,默认体系结构是ARMv7。但是,我想编译一个ARMv5二进制文件。我通过为编译器提供选项来实现。 到目前为止,一切都很好。由于我的ARM系统使用BusyBox,因此必须编译静态链接的二进制文件。所以我给gcc 选项。 但是,链接器链接到我的ARMv5二进制文件的 libc.a 出现问题。该文件使用
问题内容: 是否有一个实用程序可以将Elf需要的 所有 SO转换为静态,然后将Elf转换为SO的免费组件? 问题答案: 以下是一些您可能会发现有用的项目: 指示符(基本上是您想要的) ERESI(可以做您想做的,还可以分析ELF目标) 注意:我自己没有使用过任何一个应用程序。
问题内容: 我正在编译一些在Debian Linux系统上使用libcurl的代码。我的开发机正在运行Debian 5,但我也希望二进制文件也可以在较旧的Debian 4系统上使用。 我发现如果指定 -lcurl ,它将链接到libcurl.so.4,但是Debian 4系统仅具有libcurl.so.3 有什么方法可以告诉GCC链接到libcurl.so.3(在Debian 4和5中都存在)还是
问题内容: 上周,我创建了一个Github存储库,却忘记选择该存储库的许可证。现在已经有3个大型提交。 我问了3个贡献者是否还可以,是否删除了回购文件,然后使用相同的名称再次创建它,这一次在创建回购文件时选择了许可证,他们对此有何看法。 题 有没有一种方法可以将提交提交到新的存储库中(这次第一次提交是LICENSE文件),并且仍然保留提交元信息? 问题答案: 有没有一种方法可以将提交提交到新的存储
问题内容: 我有一个32位.so二进制库,我必须生成使用它的64位程序。有没有办法包装或转换它,使其可以与64位程序一起使用? 问题答案: 不能。您不能直接链接到64位程序内部的32位代码。 最好的选择是编译一个可以在64位平台上运行的32位(独立)程序(使用ia32),然后使用一种进程间通信的形式从64位程序与其进行通信。
问题内容: 我最近阅读了很多有关Linux上共享库的信息,这是我所学到的: 共享库应嵌入,包括其主要版本号。就像是: 其实际文件名还应包含次要版本号。就像是: 当库文件复制到,比方说,如果运行时,它会读取,创建一个名为符号链接指向。 如果要使用此库进行开发,则应首先创建一个指向实际文件的没有任何版本号的符号链接。这通常由 开发 包(打包库时)完成。 它是否正确 ? 问题答案: 建议阅读: Ulri
问题内容: 我想在(Windows)网络共享上存储一个裸露的git存储库。我使用linux,并通过CIFS挂载了上述网络共享。我的同事使用Windows XP,并将网络共享自动挂载(从ActiveDirectory以某种方式)作为网络驱动器。 我想知道是否可以在两台计算机上都使用回购协议,而不会出现并发问题。 我已经测试过了,最终我可以克隆ok,但是我担心如果我们同时访问同一个仓库(推/拉)会发生
问题内容: 我有一个共享的对象(dll)。我如何找出所有从中导出的符号? 问题答案: 您是否有“共享库”(通常是AIX上的共享库),UNIX共享库或Windows DLL?这些都是不同的东西,您的问题将它们全部融合在一起:-( 对于AIX共享对象,请使用。 对于ELF共享库,请使用或(如果您有GNU nm)。 对于非ELF UNIX共享库,请说明您对 哪个 UNIX感兴趣。 对于Windows D
问题内容: 我正在编写一个使用librt的小型C程序。如果将链接标志放在开头而不是结尾,程序将无法编译,我感到很惊讶: 此刻,我要编译程序: 如果执行以下操作,它将无法在librt中找到函数: 但是,这可以与其他库一起使用。我在尝试使用简单的Makefile时发现了问题。进行实际编译的prog.c而不先喜欢(使用-c标志),然后进行链接。 这是Makefile: 键入make时,我得到的输出将是: