Tag: 链接器

何时使用Visual Studio其他依赖关系?

在C ++中,您获得了头文件(.h),(.lib)文件和(.dll)文件。 在Visual Studio中,您可以在三个不同的位置提供search这些文件的位置: configuration属性=> C / C ++ =>常规=>其他包含目录。 在这里列出你想要search和提供的“包含”目录。 configuration属性=>链接器=>常规=>其他库目录。 在这里列出你想要search和提供的“lib”目录。 configuration属性=>链接器=>input=>其他依赖项。 在这里您明确指定要包含的.lib文件。 问题是: 问题1:如果在#1中指定了头文件,在#2中指定了lib,那么为什么/何时要在#3中指定任何内容? 问题2:我看到人们在#3中包含一个特定的debugging版本或发行版本。 你可以在#3中指定一个lib的debugging版本还是发行版本,并且仍然可以在发行版或debugging模式下生成? 理想情况下,应在此处提供哪个版本的库debugging/发行版?

如何在GCC Linux中指定非默认的共享库path? 运行时出现“加载共享库时出错”

有一台笔记本电脑,我没有根特权。 到机器上我有一个库安装使用configure –prefix=$HOME/.usr 。 之后,我在~/.usr/lib获得了这些文件: libXX.so.16.0.0 libXX.so.16 libXX.so libXX.la libXX.a 当我编译一个程序,调用库提供的函数之一,这个命令: gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX xxx.out没有警告就生成了,但是当我运行这个错误时抛出: ./xxx.out: error while loading shared libraries: libXX.so.16: cannot open shared object file: No such file or directory ,尽pipelibXX.so.16驻留在那里。 我的线索假设是~/.usr/lib在xxx.out被调用时没有被search到。 但是我能做些什么来指定.so的path,以便xxx.out可以在那里查找.so文件? 另外就是当我向gcc提供-static时候,另外一个错误是这样的: undefined reference to `function_proviced_by_the_very_librar' 看来。即使-L和-l被赋予gcc也没有关系。 我该怎么做,以build立一个可用的exe文件库? 对于和我有同样问题的其他人来说 我在tldp上find了一篇有用的文章 。 它引入了静态/共享/dynamic加载的库,以及一些示例代码来使用它们。

CMake:如何产生二进制“尽可能静态”

我想控制在CMake中find/链接到我的二进制文件的types。 最终的目标是“尽可能静态地生成二进制文件”,即静态链接到每个具有静态版本的库。 这一点非常重要,因为在testing过程中可以在不同的系统上移植二进制代码。 ATM似乎很难实现FindXXX.cmake包,或者更确切地说find_library命令总是在静态和dynamic都可用的时候selectdynamic库。 关于如何实现这个function的技巧 – 最好以一种优雅的方式 – 非常受欢迎!

在Visual Studio 2010中,“链接库依赖项”链接器选项实际上做了什么?

直到VS2008,您将自己的C ++项目依赖项设置在解决scheme文件( Project Dependencies … )中,如果(默认情况下)链接程序选项 Properties -> Linker -> General : Link Library Dependencies = Yes Visual Studio Build将自动链接到该项目所依赖的所有项目(DLL,LIB)的.lib文件中将“静态”链接。 注意:微软改变了VS2010中依赖关系的工作方式,现在你应该把依赖关系直接添加到项目中 Common Properties -> Framework and References : (List of depenencies) (each lib/dll has a separate option: Project Reference Properties -> Link Library Dependencies : True|False 我很好。 这不是这个问题的关键。 (这里有一个解释: 灵活的项目对项目参考 。) 但仍然可以在“解决scheme”级别上定义项目依赖关系,并且“ General链接器”选项也仍然存在。 但是它不起作用。 看到: […]

非常奇怪的链接器行为

这很奇怪,因为我可以通过删除对libm的引用来消除下面的错误。 gcc -o example example.o -Wl -L/home/kensey/cdev/lib -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -L/usr/lib/x86_64-linux-gnu -lm -lrt -ldl -lcdev -L/home/kensey/www.tools/gplot-lib -lgplot -L/home/kensey/www.tools/gd1_3ret -lgd -lxml2 -lcurl /usr/bin/ld: /home/kensey/www.tools/gplot-lib/libgplot.a(set.o): undefined reference to symbol 'floor@@GLIBC_2.2.5' /usr/bin/ld: note: 'floor@@GLIBC_2.2.5' is defined in DSO /usr/lib/x86_64-linux-gnu/libm.so so try adding it to the linker command line /usr/lib/x86_64-linux-gnu/libm.so: could not read symbols: Invalid operation collect2: ld […]

g ++连接器:如果静态库存在,强制静态链接?

我有一个链接到很多图书馆的程序。 g++默认情况下,即使存在相应的存档,也希望链接到共享库。 如果存在静态存档,如何将此首选项更改为首选dynamic库上的静态存档? 请注意,我使用了-static选项,但它试图find所有库的静态存档,这不是我想要的。

我可以在已编译的二进制文件中更改“rpath”吗?

我有一个旧的可执行文件计划为废品堆,但它还没有。 它依赖于已经从我的环境中删除了一些库,但我有一些存根库位于哪里工作正常。 我喜欢把这个可执行文件指向这些存根库。 是的,我可以设置LD_LIBRARY_PATH,但是这个可执行文件是从很多脚本中调用的,而且很多用户和我很想在一个地方修复它。 我没有这方面的资料,而且很难得到它。 我在想 – 我可以编辑这个文件,使用ELF感知编辑器,并添加一个简单的path到rpath,让它打到新的库? 这是可能的,或者一旦你创build一个ELF二进制文件,你修复的东西位置,他们不能被移动?

xcode4:链接器错误:未find选项的目录

我得到这个错误为我的configuration文件构build(debugging版本确定)。 {Directory not found for option '-L../../../Mac/Profile/lib [full path of that directory] Library not found for -lMyLib} 当我检查path时,该目录存在,lib文件libMyLib.a也存在。 我的档案库searchpath为包含该目录$(SRCROOT)/../../../ Mac / Profile / lib。 我也确保图书馆是在个人资料设置下build立的。 这只发生在configuration文件构build。 我真的很想得到一些帮助,虽然这可能是一个不容易的问题。 谢谢! 编辑:我自己find解决scheme解决了问题:在我的链接器path,有两个目录条目。 第二个是双引号,而第一个不是。 Xcode4似乎已经将它们连接到一个单一的目录条目,显然这是垃圾。 删除引号后,链接器错误消失了。

链接时可以混合静态和共享对象库吗?

我有一个C项目,生成十个可执行文件,我想要静态链接所有这些文件。 我面临的问题是,其中一个可执行文件使用第三方库,其中只有共享对象版本可用。 如果我将-static标志传递给gcc,ld会报错,说找不到问题的库(我认为它正在寻找.a版本),并且不会build立可执行文件。 理想情况下,如果找不到静态库,我希望能够告诉“ld”尽可能静态地链接到共享对象库。 在interium我尝试了一些像gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe ,希望“ld”能够在lib1和lib2中静态链接,但只对lib3rdparty有运行时依赖。 不幸的是,这没有按照我的意图工作。 而是-shared标志覆盖了-static标志,所有东西都被编译为共享对象。 是静态链接一个或多或less的交易,还是有一些方法,我可以混合和匹配?

我可以链接一个纯文件到我的可执行文件吗?

一些框架(Qt,Windows,Gtk等)提供了将资源添加到二进制文件的function。 我想知道如果没有这个框架,是否有可能实现这一点,因为所有真正需要的是 在二进制数据段中包含资源地址的符号(数据段) 一个符号来表示资源的长度 资源本身 这怎么可以用gcc工具链来实现呢?