Tag: 链接器

R_X86_64_32S和R_X86_64_64重定位是什么意思?

当我尝试在64位FreeBSD中编译一个C应用程序时出现以下错误: 在创build共享对象时不能使用R_X86_64_32S; 用-fPIC重新编译 什么是R_X86_64_32S重定位,什么是R_X86_64_64 ? 我已经search了这个错误,这可能是因为 – 如果有人能说出R_X86_64_32S的真正含义,那将是非常棒的。

编译Python到机器代码是否可行?

将Python(可能通过中间的C表示)编译成机器代码有多大的可行性? 据推测,它将需要链接到一个Python运行时库,Python标准库中的任何部分都是Python本身需要编译(并链接)。 另外,如果要对expression式进行dynamic评估,则需要捆绑Python解释器,但也许是不允许使用的Python子集仍然有用。 它会提供任何速度和/或内存使用优势? 据推测,Python解释器的启动时间将被消除(尽pipe共享库在启动时仍然需要加载)。

ld:未find文件:链接器命令失败,退出代码为1

在Xcode中构build项目时出现以下错误: ld:找不到文件 /Users/MacBookPro/Library/Developer/Xcode/DerivedData/Social_Events-cfnteabiivwfdzcoulzznhmgobhy/Build/Products/Debug-iphoneos/Social_Events.app/Social_Events铿锵:错误:链接器命令失败,退出代码1(使用-v看到调用) 我坚持过去一小时这个错误..任何解决scheme? 代码在iOS 7和xCode 5.0中运行良好 。 现在对于iOS8,它给了我这个错误。 使用框架: CoreTelephony Mapkit Facebook.SDK v3.20 基础 CoreGraphics中 UIKit框架 完整的错误: <pre> Ld /Users/MacBookPro/Library/Developer/Xcode/DerivedData/Social_Events-cfnteabiivwfdzcoulzznhmgobhy/Build/Intermediates/Social_Events.build/Debug-iphoneos/Social_EventsTests.build/Objects-normal/arm64/Social_EventsTests normal arm64 cd /Users/MacBookPro/Desktop/Social_Events/Social_Events/Social_Events export IPHONEOS_DEPLOYMENT_TARGET=7.1 export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" </pre> >/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -L/Users/MacBookPro/Library/Developer/Xcode/DerivedData/Social_Events-cfnteabiivwfdzcoulzznhmgobhy/Build/Products/Debug-iphoneos -F/Users/MacBookPro/Library/Developer/Xcode/DerivedData/Social_Events-cfnteabiivwfdzcoulzznhmgobhy/Build/Products/Debug-iphoneos -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/Developer/Library/Frameworks -filelist /Users/MacBookPro/Library/Developer/Xcode/DerivedData/Social_Events-cfnteabiivwfdzcoulzznhmgobhy/Build/Intermediates/Social_Events.build/Debug-iphoneos/Social_EventsTests.build/Objects-normal/arm64/Social_EventsTests.LinkFileList -dead_strip -bundle_loader /Users/MacBookPro/Library/Developer/Xcode/DerivedData/Social_Events-cfnteabiivwfdzcoulzznhmgobhy/Build/Products/Debug-iphoneos/Social_Events.app/Social_Events -framework XCTest -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=7.1 -framework XCTest -framework […]

将两个GCC编译的.o目标文件组合成第三个.o文件

如何将两个GCC编译的.o目标文件合并到第三个.o文件中? $ gcc -c ac -o ao $ gcc -c bc -o bo $ ??? ao bo -o co $ gcc co other.o -o executable 如果有权访问源文件, -combine GCC标志将在编译之前合并源文件: $ gcc -c -combine ac bc -o co 但是,这只适用于源文件,并且GCC不接受.o文件作为此命令的input。 通常情况下,链接.o文件无法正常工作,因为您无法使用链接器的输出作为input。 结果是一个共享库,并没有静态链接到生成的可执行文件。 $ gcc -shared ao bo -o co $ gcc co other.o -o executable $ ./executable ./executable: […]

dynamic链接时共享库中的全局variables和静态variables会发生什么变化?

我想了解当全局variables和静态variables模块dynamic链接到应用程序时会发生什么。 通过模块,我的意思是每个项目在一个解决scheme(我工作了很多与Visual Studio!)。 这些模块是内置到* .lib或* .dll或* .exe本身。 我知道应用程序的二进制文件包含数据段中所有单个翻译单元(目标文件)的全局和静态数据(如果是const,则只读数据段)。 当这个应用程序使用带有加载时间dynamic链接的模块A时会发生什么? 我假设DLL有一个全局和静态的部分。 操作系统是否加载它们? 如果是这样,他们在哪里装载? 当应用程序使用带有运行时dynamic链接的模块B时会发生什么? 如果我的应用程序中有两个模块都使用A和B,那么是如下所述创build的A和B的全局variables的副本(如果它们是不同的进程)? A和B是否可以访问应用程序全局variables? (请说明你的理由) 从MSDN引用: 在DLL源代码文件中声明为全局的variables被编译器和链接器视为全局variables,但是加载给定DLL的每个进程都会获得该DLL全局variables的副本。 静态variables的范围仅限于声明静态variables的块。 因此,默认情况下,每个进程都有自己的DLL全局和静态variables的实例。 并从这里 : 在dynamic链接模块时,不清楚不同的库是否有自己的全局实例或者全局variables是否共享。 谢谢。

ld找不到现有的库

我试图在Debian lenny系统上用g ++连接一个应用程序。 ld抱怨找不到指定的库。 这里的具体例子是ImageMagick,但是我也有一些其他类似的问题。 我打电话给链接器: g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic ld抱怨: /usr/bin/ld: cannot find -lmagic 但是,libmagic存在: $ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0 -rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0 $ ldd /usr/lib/libmagic.so.1.0.0 linux-gate.so.1 => (0xb7f85000) […]

解决LNK4098:defaultlib'MSVCRT'冲突

这个警告: LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 是在Visual Studio中相当常见的警告>我想了解它的确切原因和正确的方法(如果有的话)来处理它。 这出现在一个debugging版本中,用/MDd编译。 该项目链接到像Windows Version.dll和pdh.dll ,它们自己与MSVCRT.dll链接的东西。 显然,我没有这些debugging版本,不能编译它们。 所以我添加/NODEFAULTLIB:MSVCRT到链接器命令行,它实际上删除了警告。 但是这实际上是做什么的? 为什么这是必要的?

链接共享库时限制符号的可见性

有些平台要求您向链接器提供共享库的外部符号列表。 但是,在大多数unixish系统中,这是不必要的:默认情况下,所有非静态符号都将可用。 我的理解是,GNU工具链可以select性地将可见性限制在显式声明的符号上。 那怎么能用GNU ld来实现呢?

链接器错误时编译针对glib …?

我在编译一个简单的示例程序时遇到了麻烦, 我得到以下错误。 我可以得到它编译,但不与-c标志链接,我相信这意味着我已经安装了glib头,但它没有find共享目标代码。 请参阅下面的Make文件。 $> make re gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lglib-2.0 re.c -o re /tmp/ccxas1nI.o: In function `print_uppercase_words': re.c:(.text+0x21): undefined reference to `g_regex_new' re.c:(.text+0x41): undefined reference to `g_regex_match' re.c:(.text+0x54): undefined reference to `g_match_info_fetch' re.c:(.text+0x6e): undefined reference to `g_print' re.c:(.text+0x7a): undefined reference to `g_free' re.c:(.text+0x8b): undefined reference to `g_match_info_next' re.c:(.text+0x97): undefined reference to `g_match_info_matches' re.c:(.text+0xa7): undefined […]

链接器内联函数可以吗?

在文件file1.c ,有一个对文件file2.c实现的函数的调用。 当我将file1.o和file2.o链接到一个可执行文件中时,如果file2的函数非常小,链接程序是否会自动检测到该函数很小并且内联它的调用?