标签: static-linking

C++ Visual Studio:使用pragma注释进行链接

我遇到了一段使用#pragma comment(lib,"libraryname")的代码.

为什么这种用法与仅从属性菜单链接库相反?在什么情况下需要这种用法?我在使用C++ Visual Studio 2010的 Windows中.

很高兴看到一个需要这种用法的例子.

c++ dynamic-linking visual-studio-2010 static-linking

15
推荐指数
3
解决办法
3万
查看次数

是否可以识别与某些头文件对应的库?

假设我们在同一目录中有几个头文件和库文件.如果我不知道应链接哪个库,我可以通过编程方式确定必须使用哪个库.

让我说我试图编译我的代码,链接器抱怨未解析的外部符号,我能做什么,知道正确的库存在于同一目录中?

c++ linux windows static-linking visual-studio-2015

15
推荐指数
1
解决办法
530
查看次数

如何静态链接现有的linux可执行文件?

寻找将动态链接的可执行文件转换为静态可执行文件的方法.似乎它应该是可能的,但是人工页面变得很短,谷歌也没有帮助.

c++ linux executable static-linking

14
推荐指数
0
解决办法
6272
查看次数

试图静态链接Boost

我在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库?

linux linker boost static-linking

14
推荐指数
1
解决办法
1万
查看次数

如何使用clang在osx上使用libstdc ++静态链接我的c ++程序?

我正在编写c ++程序,我想在Mac OS X 10.6及更高版本上发布它.问题是当我使用clang编译程序并且它与libstdc ++动态链接时,它会导致旧系统出现问题.

-static-stdc++gcc中有一个键但是clang中没有人.如何将我的程序与clang静态链接?

我的主要目标是在Mac OS X 10.9上编译二进制文件,并能够在早期版本上运行它.也许有不同的方式?

谢谢.

c++ macos clang libstdc++ static-linking

14
推荐指数
1
解决办法
1万
查看次数

结合静态库

假设我有三个C静态库,比如libColor.a,它依赖于*libRGB.*a,而后者依赖于libPixel.a.据说库libColor.a依赖于库libRGB.a,因为libColor.a中有一些对libRGB.a中定义的符号的引用.如何将所有上述库组合到一个独立的新libNewColor.a中?

独立意味着新库应该定义所有符号.所以在链接时我只需要给出-lNewColor.新库的大小应该是最小的,即它不应该包含libRGB.a中的任何符号,libColor.a等不使用.我在ar命令中使用了各种选项来试运气(用于创建和更新静态库/档案) ).

c linux static-libraries unix-ar static-linking

13
推荐指数
3
解决办法
1万
查看次数

C++应用程序 - 我应该为库使用静态或动态链接吗?

我将开始一个新的C++项目,该项目将依赖于一系列库,包括部分Boost库,log4cxx或google日志库 - 并且随着项目的发展,其他项目(我还没有预料到) .

它必须在32位和64位系统上运行,很可能是在一个非常多样化的Linux环境中,我不希望所有必需的库都可​​用,也不需要su权限.

我的问题是,我应该通过动态或静态链接到所有这些库来构建我的应用程序吗?

笔记:

(1)我知道静态链接在开发过程中可能会很痛苦(编译时间较长,32位和64位交叉编译,依赖链包含所有库等),但在测试过程中更容易 - 只需移动文件即可运行.

(2)另一方面,动态链接接缝在开发阶段更容易 - 编译时间短(不知道如何处理来自我的32位开发环境的64位库的动态链接),没有依赖链的喧嚣.另一方面,新版本的部署可能很难看 - 特别是在需要新库时(参见上述条件,目标机器上没有su权限,也没有这些库可用).

(3)我已阅读有关此主题的相关问题,但无法确定哪种方法最适合我的方案.

结论:

  1. 谢谢大家的意见!
  2. 我可能会使用静态链接,因为:
    • 部署更容易
    • 在perf期间可预测的性能和更一致的结果.测试(见本文:http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
    • 正如所指出的,静态与动态编译的大小和持续时间似乎并没有那么大的差异
    • 更简单,更快速的测试周期
    • 我可以保留所有的开发.循环我的开发.机

c++ boost cross-compiling dynamic-linking static-linking

13
推荐指数
1
解决办法
4372
查看次数

在visual studio中如何将所有.libs包含在一个文件夹中

我正在尝试用另一个项目构建一个项目.那里有很多库,我不确定所需的未引用符号在哪里.

有没有办法.lib在编译时包含所有文件?

我已将该lib目录作为链接器的附加输入,但它要求包含单个.lib文件.是否可以选择.lib在此文件夹中包含所有内容?

static-linking visual-studio visual-c++

13
推荐指数
3
解决办法
9757
查看次数

在C中,是否可以将导出的函数名称更改为不同的名称?

所有.

我想链接一个调用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()......是定制的实现.一些是内联函数,一些是库函数.

c linker inline static-linking

13
推荐指数
1
解决办法
3787
查看次数

Can Clang compile code with GCC compiled .a libs?

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?

linux gcc clang static-libraries static-linking

13
推荐指数
2
解决办法
8544
查看次数