Linux下动态链接库 与gcc 选项

-L 编译时查找动态链接库的路径

-lxxx(小写)  e.g -lcudart   = link libcudart.so  ,

-I(大写) 头文件的路径

-rpath (-R), 编译时指定链接动态库的路径

可以用ldd <your_execute>看看是不有 ‘not found’在你链接的库后面,

解决方法是通过-Wl,rpath=<your_lib_dir>,使得execute记住链接库的位置

LD_LIBRARY_PATH  程序运行时查找动态库的路径

C_INCLUDE_PATH  gcc环境变量

http://www.cnblogs.com/wiessharling/archive/2013/09/28/3344711.html
gtk1.2的链接参数生成程序是gtk-config,执行gtk-config --libs就能得到以下输出"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic

-lgmodule -lglib -ldl -lXi -lXext -lX11 -lm",这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了--libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags,看看输出结果

现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个`xxxx-config --libs --cflags`,比如编译一个gtk程序:gcc gtktest.c `gtk-config --libs --cflags`这样就差不多了。注意`不是单引号,而是1键左边那个键

时间: 2024-10-20 17:17:49

Linux下动态链接库 与gcc 选项的相关文章

linux 下动态链接库的制作与使用

linux 下动态链接库的制作与使用 linux 下动态链接库的制作与使用动态链接库*.so的编译与使用- -动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助.1.动态库的编译下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编

Linux下动态链接库的使用

Linux下的工具和程序模块很多都是通过动态链接库实现的. 在使用的时候分为两个过程: (1)编译时需要知道动态链接库文件的位置 (2)运行时需要打开动态链接库 对于(1)的情况,在makefile文件中指定,对于(2)中的情况需要在环境变量LD_LIBRARY_PATH中指定:当然如果程序是安装make install进来的,安装位置如果在系统默认的打开动态链接库路径内,则不再需要在LD_LIBRARY_PATH变量中说明,否则就需要添加到LD_LIBRARY_PATH中. Linux下动态链

Linux 下动态链接库 *.so(生成、调用)

[摘要]动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,这里做个笔记. 1.动态库的编译 下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编译成一个动态库:libtest.so. //so_test.h: #include "stdio.h" void test_a(); void test_b(); void te

linux下动态链接库.so文件 静态链接库.a文件创建及使用

转摘网址为:http://www.cnblogs.com/fengyv/archive/2012/08/10/2631313.html Linux下文件的类型是不依赖于其后缀名的,但一般来讲:    .o,是目标文件,相当于windows中的.obj文件    .so 为共享库,是shared object,用于动态连接的,和dll差不多    .a为静态库,是好多个.o合在一起,用于静态连接    .la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息.可以用如下命令

Linux下动态链接库和静态链接库问题

第一部分:编译过程 先了解一下linux下C代码的编译过程,C代码的编译,一般分成四个阶段,包括:预编译,编译,汇编和链接,这四个阶段的分工是 预编译阶段: 编译阶段: 汇编阶段: 链接阶段: 第二部分:动态链接库和静态链接库的定义 第三部分:动态链接库和静态链接库的区别 第四部分:动态链接库和静态链接库的使用办法

LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror(转)

dlopen 基本定义 功能:打开一个动态链接库  包含头文件:  #include <dlfcn.h>  函数定义:  void * dlopen( const char * pathname, int mode );  函数描述:  在dlopen的()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程.使用dlclose()来卸载打开的库.  mode:分为这两种  RTLD_LAZY 暂缓决定,等有需要时再解出符号  RTLD_NOW 立即决定,返回前解除所有未决定的符号

linux下Clang和gcc的区别

Clang 比 GCC 编译器的优势: 编译速度更快 编译产出更小 出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 . 内置有静态分析工具,可以对代码进行静态分析 (clang—analyze) .这也是 gcc 做不到的 . 专注,因为 clang 只需要完成词法和语法分析,代码优化和机器代码的生成工作由 llvm 完成.所以和全部由自己包下的 gcc 比起来, clang 可以更专注地做好一件事.这种结构也使 clang 可以被单

linux下动态链接库(.so)的显式调用和隐式调用

进入主题前,先看看两点预备知识. 一.显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件). 动态库的调用又分为显示和隐式两种方式,区别如下: 1. 隐式调用需要调用者写的代码量少,调用起来和使用当前项目下的函数一样直接:而

Linux下tar命令exclude选项排除指定文件或目录

在linux中可以用tar打包目录以方便传输or备份,我们先来看一个例子 test 文件夹有如下文件 1 2 3 4 5 6 7 8 9 10 [[email protected] ~]# ll test 总用量 8 -rw-r--r--. 1 root root    0 4月  14 22:18 a.jpg -rw-r--r--. 1 root root    0 4月  14 22:25 a.log -rw-r--r--. 1 root root    0 4月  14 22:18 a.t