这个-static选项是个大杀器,指定了这个选项,gcc在连接时对项目所有的依赖库都尝试去搜索名为lib<name>.a的静态库文件,完成静态连接,如果找不到就报错了。这里指的所有是不仅指我们常用的第三方库比如jpeg,png,opencv,zlib,...,还包括gcc编译器自带的库libgcc,libstdc++,libc,libm...,总之就是linux kernal之外...
gnu的连接程序ld提供了一个-Bstatic选项用于对指定的库静态连接,ld的官方手册《2.1 Command Line Options》有说明,如下: 大意就是-Bstatic参数指定对跟在它后面的所有库执行静态连接,如下就指定LDFLAGS对png这个库静态连接,ld会自动去搜索libpng.a 代码语言:javascript 复制 -Bstatic-lpng-lz -l:filename 如果你...
如果目录下同时有static与shared library的话,会以shared为主。 使用-static 参数可以避免使用shared连结。 $ gcc main.c -static -L. -lmylib 此时可以用 ldd 看编译出的执行档与shared链接库的相依性 输出结果显示出该执行文件需要 libmylib.so.1 这个shared library。 会显示 not found 因为没指定该library...
静态库一般以lib开头,.a为后缀 即libXXXXX.a 3.1 动静态库的理解 那这里提到的动态库和静态库该怎么理解呢? 当我们谈论库(Library)时,可以将其比作图书馆,而静态库和动态库则是两种不同的图书存放方式。 想象一下,你是一名学生,图书馆中有很多有用的书籍,供你在学习过程中参考使用。 静态库(Static Library)...
Will link zlib and libfoo as static, and libbar as dynamic . --as-needed will drop any unused dynamic library. 但是这个过程中我用了将近1天时间才搞定的. 因为我刚开始是这样写的: g++ main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread ...
Will link zlib and libfoo as static, and libbar as dynamic . --as-needed will drop any unused dynamic library. 但是这个过程中我用了将近1天时间才搞定的. 因为我刚开始是这样写的: g++ main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread ...
sudo yum install glibc-static libstdc++-static 2.在编译选项LDFLAGS中添加-static即可正常编译运行。-satic会将所有库都变成静态的。gcc有内置加入libc的。参考:https://www.cnblogs.com/bigben0123/p/3304863.html 1. 2. 3. 4. 2,指定版本编译: GLIBC GLIBC++库。
编译时的 - L 选项并不影响环境变量 LD_LIBRARY_PATH,-L 只是指定了程序编译连接时库的路径,并不影响程序执行时库的路径,系统还是会到默认路径下查找该程序所需要的库,如果找不到,还是会报错,类似 cannot open shared object file。 -rpath-link:这个也是用于 “链接” 的时候的,例如你显示指定的需要 FOO.so...
11)链接选项(Link Option) 指定链接库和链接脚本等。12)目录选项(Directory Option) 定义引用头文件和库文件的地址,指定编译器的路径。13)目标机选项(Target Option) 运行交叉编译器,或者旧版本的GCC。上面罗列的部分类型的某些选项是最常用的,下面对其做详细介绍。1.总体选项...
原文:How to force gcc to link unreferenced, static C++ objects from a library 翻译: 我使用一个可以组建为动态库也可以是静态库的一个C++库。这个库使用了工厂技术,程序开启的时候静态对象注册它们然后静态对象就会被创建。 只有动态库被使用的话,它工作良好。在使用静态版本的时候,在最终的程序中没有静态对象...