Tag: 静态链接

将Rh Rembedded.h与C代码链接

我包括一些头文件: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 我可以使用以下命令链接blas和gsl库(-lm用于数学?): gcc -arch x86_64 myfile.c -o myfile -lgsl -lm -lgslcblas 但我得到错误: myfile.c:21:15: error: Rh: No such file or directory myfile.c:22:19: error: Rmath.h: No such file or directory myfile.c:23:23: error: Rembedded.h: No such file or directory myfile.c:24:22: error: Rdefines.h: […]

链接静态C库时未定义的引用

在我的最新项目中,我遇到了一个关于对共享库方法的未定义引用的奇怪问题。 我搜索了SO,但我能找到的只是C ++相关(extern“C”)或者没有真正帮助。 有问题的库是我的libosm分支,它使用protobuf以二进制格式(.osm.pbf)为OpenStreetMap数据生成去/序列化代码。 有问题的函数是osmpbf__blob__unpack但这只是我最终使用的第一个,所以我怀疑它是一个普遍的问题。 我用nm检查了生成的libosm.a ,并且该方法在那里并导出但由于某种原因在链接时找不到它。 以下是我目前的旗帜。 我尝试更改顺序,甚至包括所有库两次(如另一个线程中所示),但我总是以未定义的引用结束。 CFLAGS = -v -std=c99 -O3 -Wall -Wextra -pedantic LIBFLAGS = -losmpbf -lprotobuf-c -lz -lpthread 目前我对错误可能很遗憾,但我认为这可能是一个小错误。 自从我使用C以来已经有一段时间..任何帮助将不胜感激。 干杯,弗洛里安 编辑:这是我完整的Makefile。 我刚刚LIBFLAGS了变量LIBFLAGS的名称,因为我使用了自己的小规则,但似乎我应该使用LDLIBS和内置规则来处理这个简单的情况。 CC = gcc CFLAGS = -v -std=c99 -O3 -Wall -Wextra -pedantic LIBFLAGS = -losmpbf -lprotobuf-c -lz -lpthread all: main.x main.x: main.c $(CC) $(CFLAGS) $(LIBFLAGS) main.c -o main.x […]

无法链接BFD

我想在我的项目中包含这个文件: http : //cairo.sourcearchive.com/documentation/1.9.4/backtrace-symbols_8c-source.html 但它需要与BFD链接。 我安装了binutils和binutils-devel 。 我尝试过连接-lbfd以及直接连接到/usr/lib64/libbfd.so和/usr/lib64/libbfd.a (两者都存在)。 我也尝试搜索pkg-config以查看我应该使用的是否有不同的标志,但是pkg-config没有引用BFD或binutils 。 无论我尝试过什么,我都会遇到以下错误: undefined reference to ‘bfd_init’ undefined reference to ‘bfd_openr’ undefined reference to ‘bfd_check_format’ undefined reference to ‘bfd_checkformat_matches’ undefined reference to ‘bfd_close’ undefined reference to ‘bfd_map_over_sections’ 首先,我正在编译我的记录器和我上面链接的backtrace-symbols.c文件(因为记录器是我打算用它来打印痕迹的地方)。 然后我将这两个目标文件一起链接到一个组合的目标文件中: CC = clang CFLAGS = -g -Wall -c SOURCE = simplog.c OBJ = simplog.o, simplog-temp.o, backtrace-symbols.o all: […]

链接到共享符号名称的库的程序运行错误

这有点难以理解,但我正在尽我所能。 在Red Hat 6.4上使用gcc 4.4.6和ld 2.20.51, 我从一个共享库(.so)和一个静态库(.a)链接到二进制可执行PROGRAM代码。 共享库公开由PROGRAM直接调用的API。 该共享库的实现是针对静态库静态库lib1编译和链接的。 静态库还公开了自己的API,它由PROGRAM直接调用。 它的一些实现是基于直接复制到其中的静态lib1文件的一个子集。 任何API(任一库)都没有实际公开数据类型或静态lib1实现的函数。 因为代码被复制,所以符号是相同的。 在运行时我看到这种行为: 如果链接库的顺序是共享库 , 静态库 ,那么调用共享库API并调用静态库* API都将使用** static lib1中的实现 。 如果链接器的库顺序是静态库 , 共享库 ,那么调用共享库API并调用静态库API都将使用静态库1中的实现– 来自lib1的代码修改 。 如何调用静态库API以在lib 1中修改代码中运行实现,而在共享库API中运行实现在静态lib1中 ?

用windows链接linux静态库和cygwin

我有一个二进制静态库libfoo.a编译为32位Linux机器。 我希望在我用cygwin编译的win32项目中编译它。 那可能吗? 这似乎是可能的,因为存档中的所有目标文件都应该是标准的ELF格式。 但是我一直在收到有关nm在libfoo.a找到的函数的链接错误。 当我创建一个存根libfoo.a ,其中包含一些与libfoo.a相同名称的空函数时,我没有收到有关这些函数的链接错误。 这是可能的还是我错过了什么? 无论如何,我该如何解决这个问题?

将mono编译为静态库

我想在Windows上将libmono编译为静态库。 目标平台是Windows x86。 构建环境:Windows 7 64位,VC ++ Express 2010 我已经做了什么。 1)下载单声道2.10.8源。 2)从msvc文件夹中打开mono.sln并确保一切正在进行。 3)然后我做了一些改变: 3.1)常规 – >项目默认值 – >配置类型:静态库(.lib) 3.2)常规 – >项目默认值 – >使用MFC:使用标准Windows库 3.3)C / C ++ – >代码生成 – >运行时库:multithreading(/ MT) 4)构建它并且VC ++ 2010成功创建了mono-2.0.lib 5)在我自己的项目的链接器输入中添加它(我想嵌入单声道): 5.1)常规 – >项目默认值 – >配置类型:应用程序(.exe) 5.2)常规 – >项目默认值 – >使用MFC:在Ststic库中使用MFC 5.3)C / C ++ – >代码生成 – >运行时库:multithreading(/ MT) […]

C程序中.eh_frame部分的用途是什么?

我有一个从C程序编译的静态链接可执行文件。 objdump -x a.out表示即使在strip -s之后也存在.eh_frame部分。 为什么这部分在C (非C ++)程序中有用 ? 剥离它的风险是什么(使用strip -R .eh_frame )?

静态和动态地链接同一个库

我有一个静态链接到库( libA.2.0.a )的程序,并且还动态链接到另一个库( libB.so )。 libB.so还动态链接到旧版本的libA( libA.1.0.so )。 这种配置是否可行? 如果是这样,系统如何知道使用libA.2.0.a的符号表示我的程序, libA.1.0.so的符号表示libB.so ?

链接Xcode 7中的静态C库?

我目前正在尝试将我创建的静态C库链接到一个新的Xcode项目。 要链接它,我按照以下说明操作: 1)导航到Build Phases 2) 使用库展开链接二进制文件 3)添加了“其他”库,然后指定了相关的.a文件。 不幸的是,该项目不会编译并抛出以下错误: ld: library not found for -ltxht 我不确定该怎么做。 该库似乎在项目中作为项目文件显得正常,我找不到任何迹象表明存在任何问题。 我已经尝试在文件检查器中设置它的位置以使用绝对路径 ,但这并没有改变任何东西。 我也看到在一些类似的在线post中,以某种方式提供静态库的完整路径可能有助于解决问题: 回应你对Eduard Wirch回答的评论:如果你用-l / full / path /替换/ libhdf5.a,你也可以只为这一个库控制静态链接 从这个SOpost 。 但是,我不知道该怎么做? 我已经进入了构建设置 ,除了选项页面之外什么都没看到,但是在Headers或Linking下没有多少似乎允许我做我想要的。 谁能解释如何正确添加这个静态C库? 仅供参考,项目相对于图书馆所在地的位置如下: 库: /lib/libtxht/libtxht.a Xcode项目: /lib/libtxvm/myProject.xcodeproj

创建静态库

我正在尝试创建一个静态库,以便在我的PHP扩展中使用。 为此,我使用gcc -c file.c -o file.o编译我的.c文件并获取.o文件。 然后我使用ar rcs lib.a *.o将所有编译的对象存档到.a文件中。 执行此操作后,我在编译我的PHP扩展时引用此.a文件,但是我收到以下错误: *** Warning: Linking the shared library .la against the *** static library lib.a is not portable! 如果我使用.o文件而不是.a文件,我得到: *** Warning: Linking the shared library .la against the non-libtool *** objects file1.o file2.o is not portable! 我做错了什么,这样做的正确方法是什么?