我遇到了一段使用#pragma comment(lib,"libraryname")的代码.
为什么这种用法与仅从属性菜单链接库相反?在什么情况下需要这种用法?我在使用C++ Visual Studio 2010的 Windows中.
很高兴看到一个需要这种用法的例子.
假设我们在同一目录中有几个头文件和库文件.如果我不知道应链接哪个库,我可以通过编程方式确定必须使用哪个库.
让我说我试图编译我的代码,链接器抱怨未解析的外部符号,我能做什么,知道正确的库存在于同一目录中?
寻找将动态链接的可执行文件转换为静态可执行文件的方法.似乎它应该是可能的,但是人工页面变得很短,谷歌也没有帮助.
我在Linux,Eclipse CDT,g ++和Boost库中工作.有了使用Boost线程的现有程序,我尝试静态而不是动态地链接它./ usr/local/lib目录包含以下文件:
libbost_thread.a
libbost_thread.so
libbost_thread.1.41.0
Run Code Online (Sandbox Code Playgroud)
动态链接工作:
g++ -o"MyProgram" ./main.o -lboost_thread
Run Code Online (Sandbox Code Playgroud)
静态链接:
g++ -static -o"MyProgram" ./main.o -lboost_thread
Run Code Online (Sandbox Code Playgroud)
产生大量的消息,如:
对'pthread_mutex_init'的未定义引用
如何静态链接到Boost库?
我正在编写c ++程序,我想在Mac OS X 10.6及更高版本上发布它.问题是当我使用clang编译程序并且它与libstdc ++动态链接时,它会导致旧系统出现问题.
-static-stdc++gcc中有一个键但是clang中没有人.如何将我的程序与clang静态链接?
我的主要目标是在Mac OS X 10.9上编译二进制文件,并能够在早期版本上运行它.也许有不同的方式?
谢谢.
假设我有三个C静态库,比如libColor.a,它依赖于*libRGB.*a,而后者依赖于libPixel.a.据说库libColor.a依赖于库libRGB.a,因为libColor.a中有一些对libRGB.a中定义的符号的引用.如何将所有上述库组合到一个独立的新libNewColor.a中?
独立意味着新库应该定义所有符号.所以在链接时我只需要给出-lNewColor.新库的大小应该是最小的,即它不应该包含libRGB.a中的任何符号,libColor.a等不使用它.我在ar命令中使用了各种选项来试运气(用于创建和更新静态库/档案) ).
我将开始一个新的C++项目,该项目将依赖于一系列库,包括部分Boost库,log4cxx或google日志库 - 并且随着项目的发展,其他项目(我还没有预料到) .
它必须在32位和64位系统上运行,很可能是在一个非常多样化的Linux环境中,我不希望所有必需的库都可用,也不需要su权限.
我的问题是,我应该通过动态或静态链接到所有这些库来构建我的应用程序吗?
笔记:
(1)我知道静态链接在开发过程中可能会很痛苦(编译时间较长,32位和64位交叉编译,依赖链包含所有库等),但在测试过程中更容易 - 只需移动文件即可运行.
(2)另一方面,动态链接接缝在开发阶段更容易 - 编译时间短(不知道如何处理来自我的32位开发环境的64位库的动态链接),没有依赖链的喧嚣.另一方面,新版本的部署可能很难看 - 特别是在需要新库时(参见上述条件,目标机器上没有su权限,也没有这些库可用).
(3)我已阅读有关此主题的相关问题,但无法确定哪种方法最适合我的方案.
结论:
我正在尝试用另一个项目构建一个项目.那里有很多库,我不确定所需的未引用符号在哪里.
有没有办法.lib在编译时包含所有文件?
我已将该lib目录作为链接器的附加输入,但它要求包含单个.lib文件.是否可以选择.lib在此文件夹中包含所有内容?
所有.
我想链接一个调用malloc()函数的库.但是,我的目标环境是不同的,并
malloc()作为内联函数提供.
如何将库的调用malloc()指向我的目标环境的malloc()例程?
是否可以更改导出的函数名称?如果是这样,我可以my_malloc()先编码并将其导出为malloc()并将库链接到该库:
#include <my_environment.h> // malloc() is inline function declared there
void my_malloc (void) {
malloc (void);
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,该库是来自linux发行版的库,因此它依赖于libc.但我的环境嵌入了一个,没有libc库和malloc(),free()......是定制的实现.一些是内联函数,一些是库函数.
I have my project currently compiling under gcc. It uses Boost, ZeroMQ as static .a libraries and some .so libraries like SDL. I want to go clang all the way but not right now. I wonder if it is possible to compile code that uses .a and .so libraries that were compiled under gcc with clang?
static-linking ×10
c++ ×5
linux ×5
boost ×2
c ×2
clang ×2
linker ×2
executable ×1
gcc ×1
inline ×1
libstdc++ ×1
macos ×1
unix-ar ×1
visual-c++ ×1
windows ×1