Articles of 静态链接

静态链接NCurses给出错误,用于BusyBox环境

我写了一个非常简单的ncurses程序在BusyBox环境下运行。 但是,似乎我无法让我的程序编译一切。 我用了: g++ menu.cpp -ohello -lncurses –> Works fine g++ -static menu.cpp -ohello -lncurses –> Undefined reference to SP (many times) 我发现这个问题,但它忽略了与ncurses的链接。 我需要一个非常可执行的文件 我的目标环境是固定的,所以我不关心可移植性。

libpng15静态链接问题

我在开发基于libpng (1.5版本)的自己的应用程序时遇到了一个问题。 长话短说,我需要静态链接这个库,但我不断收到“未定义的参考”的错误。 我试图解压缩libpng15.a并将其内容添加到我的库,以及与gcc命令链接。 我的gcc命令: gcc test.c librimg.a libz.a libpng15.a -o test -std=c99 -lglfw -lGL -lGLU 我得到的错误: libpng15.a(libpng15_la-png.o): In function `png_reset_crc': /home/robin/Downloads/libpng-1.5.12/png.c:111: undefined reference to `crc32' libpng15.a(libpng15_la-png.o): In function `png_calculate_crc': /home/robin/Downloads/libpng-1.5.12/png.c:152: undefined reference to `crc32' libpng15.a(libpng15_la-png.o): In function `png_reset_zstream': /home/robin/Downloads/libpng-1.5.12/png.c:757: undefined reference to `inflateReset' libpng15.a(libpng15_la-pngread.o): In function `png_create_read_struct_2': /home/robin/Downloads/libpng-1.5.12/pngread.c:119: undefined reference to `inflateInit_' libpng15.a(libpng15_la-pngread.o): In […]

静态与dynamic链接冲突和重复

我有一个静态链接到一个版本的mpich的代码A. 现在来到图书馆B,由A通过dlopen()使用。 B也取决于mpich,但dynamic地与它链接。 现在的问题是,为了让B利用mpi分发,需要访问当前由A处理的通信器。这个通信器是由mpich的一个静态版本创build的,当B调用MPI例程时,它将使用dynamic版本的MPI,这是不符合附加到A的静态版本兼容。 这是整体画面。 我认为唯一的解决办法是让mpichdynamic链接到A和B.但是我不完全理解的是: 链接器如何处理共享对象的依赖关系? 在虚拟机中有两个mpich实例还有dynamic链接,或者链接器是否足够聪明,可以认识到被转折的B所需要的符号已经在地址空间中,并且将根据这些符号来解决。 是否有可能告诉链接器:当你使用这个库的时候,不要去获取dynamic的依赖关系,而是使用已经由A提供的静态符号来解决它

静态链接g ++时出错

我有一个问题,我想编译我的应用程序与MySQL连接器的静态链接。 我的命令行: g ++ -o newserver stdafx.cpp … -lboost_system -lboost_thread -lpthread -lmysqlcppconn -static /usr/lib/libmysqlcppconn-static.a -std = c ++ 0x 但我有错误: /usr/bin/ld: cannot find -lmysqlcppconn /tmp/ccxpOfdZ.o: In function `IsEqualsDns(unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': Server.cpp:(.text+0x356e): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking collect2: […]

当我使用STL在Linux上编译C ++程序时,STL库如何链接?

当我使用g ++编译使用STL的程序时,库如何链接到我的程序? dynamic还是静态? 对我来说,静态的听起来很奇怪,因为这意味着每一个使用STL的C ++程序都必须在内部包含它。 另一方面,dynamic链接的声音对我来说也是奇怪的,就像所有的OOP的东西,我不明白如何dynamic链接库,也支持不同种类的对象… 那么究竟发生了什么?

将静态库转换为dynamic链接库的方法

如果我所有的库都是* .a静态库。 有没有办法,我可以将其转换为* .sodynamic链接库? 也许使用ld? 我正在使用SUSE Linux。 ELF平台。

如何编译C程序,使其不依赖于任何库?

看来即使是一个世界上你好的程序取决于几个库: libc.so.6 => /lib64/libc.so.6 (0x00000034f4000000) /lib64/ld-linux-x86-64.so.2 (0x00000034f3c00000) 我如何静态链接所有的东西?

静态链接的C ++二进制工作在每个系统具有相同的架构?

我正在做一个非常简单的程序与c + +的Linux使用情况,我想知道是否有可能只有一个大的二进制包含所有的依赖关系,可以在任何Linux系统上工作。 如果我的理解是正确的,那么任何编译器都会将源代码转换为机器指令,但是由于经常有一些代码可以在不同的程序中重复使用,所以大多数程序依赖于另一个库。 但是,如果我有我的所有依赖的源代码,我应该能够编译一个二进制的方式,不需要从系统中的任何东西? 我能在32位系统上运行在64位系统上编译的东西吗?

静态链接整个程序

我有一个从Windows移植到Linux的c ++应用程序,一切正常,但…我们的客户在Debian 3.1(sarge)上运行的应用程序,我不能强制目标系统上的gcc版本,我更喜欢使用新的gcc (有一些C ++ 11的构造,我想保留)。 我现在想为将来的testing和.so文件做可执行文件。 我决定静静地编译我的程序。 当我运行: g++ -static -o prog obj/sublib1/file1.o obj/sublib1/file2.o obj/sublib2/file1.o obj/sublib2/file2.o (…) -L../somedir -s -lsomestaticlib 我得到错误: /usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lm /usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lc 系统是OpenSuse 13.1 32bit,uname -a: Linux linux-zfaz.site 3.11.6-4-desktop #1 SMP PREEMPT Wed Oct 30 18:04:56 UTC 2013 (e6d4a27) i686 i686 i386 GNU/Linux 问题可能是math库和C库。 两个库的dynamic版本都位于/ lib目录中。 (可能并不重要:我试图使用code […]

GCC库中未定义的引用

我试图在Linux上build立我公司主要应用程序的静态链接版本。 该应用程序使用Qt 5.3,如果我使用Qtdebugging/dynamic链接构build,一切都编译得很好。 不过,在进行静态构build时,我从/usr/lib/x86_64-linux-gnu库中收到许多奇怪的错误。 我在Qt下载的5.3/Src/qtbase/文件夹中使用以下命令为静态构buildconfiguration了Qt 5.3.1: ./configure -release -static -opensource -nomake tools -nomake examples –force-asserts -no-sql-sqlite -no-libjpeg -no-opengl -no-gif -qt-xcb -qpa xcb make clean make sub-src 然后,我使用QMake创build应用程序,并在Emu项目目录中使用以下命令: /path/to/qt-static/qmake -r -spec linux-g++ emu.pro make clean make 最后一个make命令在最后的链接步骤中产生以下错误: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libXi.a(XExtInt.o): In function `XInput_find_display': (.text+0xf9): undefined reference to `XextFindDisplay' /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libXi.a(XExtInt.o): In function `XInput_find_display': (.text+0x111): undefined reference to `XextCreateExtension' /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libXi.a(XExtInt.o): […]