上下文:我可以创建一个链接到静态库的共享对象库,在32位Linux上没有任何问题。当我在64位Linux上尝试相同的构建时,我看到了这个链接器错误:创建共享对象时不能使用针对“局部符号”的重定位R_X86_64_32S;重新编译-fPIC这个错误在网络上很常见。解决方案是使用位置无关代码(-fPIC)编译静态链接库。我不明白的是为什么32位版本不需要这样做。有人可以帮忙吗? 最佳答案 如果您的目标模块将在共享库中使用,则始终需要“位置独立代码”。它高度依赖于平台,并且会产生一些开销。您必须在amd64而不是x386上明确指定它的原因
静态库和可重定位目标文件有什么区别?或者在动态库和共享对象文件之间。如果这不是平等的东西,什么有动态库,允许与之链接,但共享对象文件没有? 最佳答案 静态库基本上只是目标文件的集合。它通常只是目标文件的ar存档。使用ar,您可以从库中提取目标文件,向其中添加不同的目标文件等。一般来说,动态库和共享对象文件的区别在于目标——Windows使用动态库,Linux使用共享对象。有一点不同,但不是很多。 关于linux-静态库和可重定位目标文件之间的区别?,我们在StackOverflow上找到
静态库和可重定位目标文件有什么区别?或者在动态库和共享对象文件之间。如果这不是平等的东西,什么有动态库,允许与之链接,但共享对象文件没有? 最佳答案 静态库基本上只是目标文件的集合。它通常只是目标文件的ar存档。使用ar,您可以从库中提取目标文件,向其中添加不同的目标文件等。一般来说,动态库和共享对象文件的区别在于目标——Windows使用动态库,Linux使用共享对象。有一点不同,但不是很多。 关于linux-静态库和可重定位目标文件之间的区别?,我们在StackOverflow上找到
我在Ubuntu12.04上构建了一个应用程序,并尝试在嵌入式系统上运行它。我在我的开发机器上运行apt-cacheshowlibc6显示(除其他外)Package:libc6Priority:requiredSection:libsArchitecture:i386Source:eglibcVersion:2.15-0ubuntu10Replaces:belocs-locales-bin,libc6-i386Provides:glibc-2.13-1,libc6-i686嵌入式设备上存在的libc6版本是2.8.90。在设备上的\lib目录中,我有2个库libc-2.8.90.sol
我在Ubuntu12.04上构建了一个应用程序,并尝试在嵌入式系统上运行它。我在我的开发机器上运行apt-cacheshowlibc6显示(除其他外)Package:libc6Priority:requiredSection:libsArchitecture:i386Source:eglibcVersion:2.15-0ubuntu10Replaces:belocs-locales-bin,libc6-i386Provides:glibc-2.13-1,libc6-i686嵌入式设备上存在的libc6版本是2.8.90。在设备上的\lib目录中,我有2个库libc-2.8.90.sol
如何使用GNUld将(某些)符号链接(symboliclink)到特定的固定地址,以便二进制文件仍可以在Linux(x86)中正常执行?不会对这些符号进行任何访问,但它们的地址很重要。例如,我有以下结构:structFooBar{Register32field_1;Register32field_2;//...};structFooBarfoobar;我想将foobar链接到地址0x76543210,但正常链接标准库和应用程序的其余部分。然后应用程序将使用foobar的地址,但不会引用它背后的(可能不存在的)内存。此请求的基本原理是同一源可以在两个平台上使用:在native平台上,Re
如何使用GNUld将(某些)符号链接(symboliclink)到特定的固定地址,以便二进制文件仍可以在Linux(x86)中正常执行?不会对这些符号进行任何访问,但它们的地址很重要。例如,我有以下结构:structFooBar{Register32field_1;Register32field_2;//...};structFooBarfoobar;我想将foobar链接到地址0x76543210,但正常链接标准库和应用程序的其余部分。然后应用程序将使用foobar的地址,但不会引用它背后的(可能不存在的)内存。此请求的基本原理是同一源可以在两个平台上使用:在native平台上,Re
我正在尝试在Ubuntu10.10上安装rubygemforcurl(curb),但在安装过程中,出现错误:/usr/bin/ld:cannotfind-lcurl但是安装了curl!apt-getinstallcurl说我有最新版本。也没有curl-dev。我总是遇到这些类型的错误,使用curl、使用libxml、使用readline,我不知道发生了什么。我安装的Ubuntu出了点问题,但我不知道是什么,我不知道去哪里查看,我不知道该用谷歌搜索什么,我也不知道如何修复它。我们将不胜感激。编辑:这是在我的libcurl的/usr/lib目录中:lrwxrwxrwx1rootroot
我正在尝试在Ubuntu10.10上安装rubygemforcurl(curb),但在安装过程中,出现错误:/usr/bin/ld:cannotfind-lcurl但是安装了curl!apt-getinstallcurl说我有最新版本。也没有curl-dev。我总是遇到这些类型的错误,使用curl、使用libxml、使用readline,我不知道发生了什么。我安装的Ubuntu出了点问题,但我不知道是什么,我不知道去哪里查看,我不知道该用谷歌搜索什么,我也不知道如何修复它。我们将不胜感激。编辑:这是在我的libcurl的/usr/lib目录中:lrwxrwxrwx1rootroot
我正在尝试在我的操作系统上设置libusbAPI。我在libusb.org下载了libusbapi。我遵循了标准安装程序:cdintodirectory./configuremakemakecheck//withouterrorsmakeinstall然后我启动了EclipseC/C++并从网上找到的教程中复制了一些代码。但是在尝试构建它时,我得到了以下输出:main.cpp:(.text+0x19):undefinedreferenceto`libusb_init'main.cpp:(.text+0x76):undefinedreferenceto`libusb_set_debug'