编译链接总结

1. -L增加一个搜索路径,不一定要跟-l放在一起;不区别静态链接和动态链接。

2. 用-lxx与 libxx.a的区别是:前者会搜索多个路径。

3. 使用-lxx链接动态库时,动态库所在的目录不一定在搜索路径,可以加到/etc/ld.so.conf中,或者/etc/ld.so.conf.d/libxx.conf,并重启ldconfig。(ldd)

4. 动态链接库可以访问可执行程序内定义的函数,动态链接库可以相互访问函数,使用dlopen指定RTLD_GLOBAL。

5. 使用libxx.a与把xx.a中的所有.o列出来的区别是:前者以.o为单位找符号,如果整个.o中没有这个符号,则不链接进去,后者会将所有的。o都链接到可执行文件。

6. 编译动态库时gcc -c -fPIC xx.c, gcc -shared -o xx.so xx.o, export LD_LIBRARY_PATH=`pwd`

编译链接总结,布布扣,bubuko.com

时间: 2024-10-14 00:24:21

编译链接总结的相关文章

GCC编译器编译链接

在gcc编译器环境下,常见的文件扩展名的含义如下: .c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出. .h:头文件 .s:经过编译得到的汇编程序代码,它可以通过-S参数输出. .o:目标文件 .a:函数库 Gcc编译器常见语法: -c:只进行编译,不进行链接,输出的是与源文件同名的.o文件. -o:指定生成的文件的名称.链接生成可执行文件,这个参数后可以带可执行文件的名字,如果没有指定可执行文件的名字,则会默认为a.out. -S:输出汇编代码文件,输出一个与源文件同名

【转】关于编译链接——gcc/g++

添加运行时共享库目录 运行使用共享库的程序需要加载共享库(不同于G++ 编译时指定的链接库),添加共享库的步骤: 修改文件 /etc/ld.so.conf 添加共享库目录 运行 ldconfig 同步更新一下 如: $ gedit /etc/ld.so.conf #添加 /root/dreamlove/lib $ ldconfig 添加include,lib的搜寻路径 对所有用户有效修改/etc/profile 对个人有效则修改~/.bashrc #在PATH中找到可执行文件程序的路径. exp

C++开始前篇,深入编译链接

C++开始,为什么要写这个东西,因为按照课堂进度的话,现在的C++已经学到模板以及重载了,有时却仍然因为一些小问题无法解答,原因是忘记了开始时学到的知识,深知不能像猴子掰棒子一样,掰一个扔一个,因此,现在踏踏实实的回顾一下.另外希望各位博友们随时指正,不甚感激! 前部分大概分为,1,深入编译链接.2,函数调用堆栈.3,C跟C++的区别.4,面向对象思想...(未完待续) 温故而知新. --------------------------------------------------------

mac 命令行里 编译 链接 出现xcrun: error: active developer&nbs

mac 命令行里 编译 链接 出现xcrun: error: active developer path mac cc 编译出现 xcrun: error: active developer path ("/Volumes/Xcode/Xcode.app/Contents/Developer") does not exist, use xcode-select to change 在命令行里输入 sudo xcode-select -switch /Applications/Xcode

加快XCode的编译链接速度(200%+)—XCode编译速度慢的解决方案

最近在开发一个大项目的时候遇到一个很头疼的问题,由于项目代码较多,每次都要编译链接1分钟左右,调试的时候很浪费时间,于是研究了一下如何提高编译链接的速度,在这里分享给大家. 提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升

程序的编译链接过程

还是从HelloWorld开始说吧... #include <stdio.h> int main(int argc, char* argv[]) { printf("Hello World!\n"); return 0; } 从源文件Hello.cpp编译链接成Hello.exe,需要经历如下步骤: 可使用以下命令,直接从源文件生成可执行文件 linux: gcc -lstdc++ Hello.cpp -o Hello.out // 要带上lstdc参数,否则会报undef

关于tcc、tlink的编译链接机制的研究

1.学习过程 在c:\下建立文件夹c,并将编译器tcc.exe.连接器tlink.exe.相关文件c0s.obj.cs.lib.emu.lib.maths.lib放入文件夹中. 要搭建一个简单的C语言编译环境,需要TC2.0.c0s.obj.emu.lib.maths.lib.graphics.lib.cs.lib文件.而这里用编译器tcc.exe.连接器tlink.exe代替了TC2.0,而且相关文件也少了graphics.lib,为什么这样也可以呢?我们先尝试在新建立的环境下编译连接一个文件

转载:ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复

转载自:http://www.cnblogs.com/dabaopku/archive/2012/12/12/2813940.html ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复 问题 -all_load 是在Objective-C 编译时常用到的一个参数,比如这篇文章所介绍的,生成静态库的一些问题-all_load.但是我们在加入这个参数后,有时会出现"ld: duplicate symbol _main"的错误

VS编译链接时错误(Error Link2005)的解决方法

近期参与的项目中使用了公司另外一个同事提供的一个静态库文件.该静态库文件集成了CUDA, OpenCL两个库,用于做图形加速计算,提高视频解码拼接速度.但是在编译链接项目时,VS爆出如下错误: 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xi_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xi_z 已经在 MSVCRT.lib(