g++的编译选项:-Wl,-rpath=【转】】的更多相关文章

转自:http://blog.csdn.net/russule/article/details/7057398 动态链接库 1 生成hello.so g++ -shared hello.cpp -olibhello.so g++ main.cpp -lhello -L./ -Wl,-rpath=./ -o main 链接命令可使用g++ main.cpp libhello.so.2 -L./ -Wl,-rpath=./ -o main g++ main.cpp -L./second/ -Wl,-…
---此文章同步自我的CSDN博客--- 一.运行时动态库:not found   今天在使用linux编写c/c++程序时,需要用到第三方的动态库文件.刚开始编译完后,运行提示找不到动态库文件.我就使用了ldd命令查看了一下,发现是有一个库文件显示"not found",如下图所示;    对于库文件未找到,因为编译.链接都没有问题,那就是运行链接动态库时找不到动态库了.对于运行链接动态库时找不到动态库的方法,最基本的解决方法就两种:   第一种方法:找到缺少的动态库(由于编译和链接…
目录 前言 源码准备 源码内容 尝试编译,保证源码没有问题 编译 首先编译world.c 编译并链接hello.c 调试编译test.c 结论 转载请注明出处,谢谢 https://www.cnblogs.com/tianknight/p/10648021.html 前言 关于gcc这三个参数,参考了诸多文档后,仍然理解上有偏差,仿照下面博客中的方法,自己调试了一波,总算是理解了.还是建议大家动手实践一下. 参考资料如下: https://blog.csdn.net/q1302182594/ar…
使用GCC编译动态链接库的项目时,在其他目录下执行很可以出现找不到动态链接库的问题. 这种情况多发生在动态链接库是自己开发的情况下,原因就是程序运行时找不到去何处加载动态链接库. 可能会说在编译时指定了链接的目录啊!编译时指定的 -L的目录,只是在程序链接成可执行文件时使用的.程序执行时动态链接库加载不到动态链接库. 解决办法有两种,第一程序链接时指定链接库的位置,就是使用-wl,-rpath=<link_path>参数,<link_path>就是链接库的路径.如: gcc -o…
GNU g++常用编译选项用法 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/30686/showart_1210761.html GCC Option Refresher 本节回顾GCC的C编译器的基本使用方法. g++编译器的选项可以是单字符,比如-o,也可以多字符,比如-ansi.所以你不可以把多个单字符选项合写到一起,这和许多其他GNU和UNIX下的程序不同.例如,多字符选项-pg不表示2个单字符选项-p -g.选项-pg表示在…
http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.html gcc/g++ 在执行编译时,需要4步 1.预处理,生成.i的文件[使用-E参数] 2.将预处理后的文件不转换成汇编语言,生成文件.s[使用-S参数] 3.有汇编变为目标代码(机器代码)生成.o的文件[使用-c参数] 4.连接目标代码,生成可执行程序[使用-o参数] -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定,C语言的后缀名…
 将库函数打包成一个单元使之能够在运行时被多个进程共享的技术,这种技术能够节省磁盘空间和RAM. 一. 静态库:1.概念:    静态库就是一些目标文件的集合,以.a结尾.静态库在程序链接的时候使用,链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中.一旦链接完成,在执行程序的时候就不需要静态库了. 由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的文件会比较大.2.创建与应用:    首先创建库文件libhello.c1 #include <stdio.h>2 vo…
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.    基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 => (0x00007fff597ff000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00000036c2e00000) librt.so.1 => /…
摘自http://gotowqj.iteye.com/blog/1926734 摘自http://www.360doc.com/content/14/0313/13/12747488_360246417.shtml linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.        基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看  # ldd /bin/ls linux-vds…
1. 配置编译器环境 [compiler] sudo apt-get install build-essential 2. 安装OpenCV的依赖包 [required] -dev pkg-config libavcodec-dev libavformat-dev libswscale-dev [optional] -dev 3. cmkae 外部构建 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_TIFF=ON…
上一篇(linux下so动态库一些不为人知的秘密(上))介绍了linux下so一些依赖问题,本篇将介绍linux的so路径搜索问题. 我们知道linux链接so有两种途径:显示和隐式.所谓显示就是程序主动调用dlopen打开相关so;这里需要补充的是,如果使用显示链接,上篇文章讨论的那些问题都不存在.首先,dlopen的so使用ldd是查看不到的.其次,使用dlopen打开的so并不是在进程启动时候加载映射的,而是当进程运行到调用dlopen代码地方才加载该so,也就是说,如果每个进程显示链接a…
由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习.之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的指点,对于makefile做了调整,看下两者之间的差别吧.如果有更好的方法,欢迎指点. 第一次文件如下: CPP=filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp OBJ = md5.o compressfact…
Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端) 分类: redis 学习 2013-03-27 09:37 635人阅读 评论(0) 收藏 举报   Redis是一个开源的使用ANSI C语言编写.支持网络.可基于 其中0,代表此key不存在;1代表存在.  redis客户端(C语言) 上面介绍了redis 安装和简单使用操作,下面,我们来介…
ThreadPool.h #ifndef __THREADPOOL_H #define __THREADPOOL_H #define HAVE_STRUCT_TIMESPEC //#include "servant/Application.h" #include <vector> #include <string> #include <pthread.h> using namespace std; /** * 执行任务的类,设置任务数据.定义执行方法…
Qt与CUDA相结合具体的操作主要修改qt项目中的配置文件pro.下面以测试的项目为例. 因为这是一个测试案例,代码很简单,下面将这几个文件的代码贴出来,方面后面对应pro文件和Makefile文件中的内容. 1.main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { printf("main1 \n"); QApplicati…
项目终于到了把程序往小型机上部署的阶段了.不得不说AIX真是让人恶心,一个Poco编译弄了我1周时间.网上根本没有相关的资料. 1. AIX下安装gcc/g++:在ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gcc/下载:gcc-4.2.0-3.aix6.1.ppc.rpmlibgcc-4.2.0-3.aix6.1.ppc.rpmlibstdcplusplus-4.2.0-3.aix6.1.ppc.rpmlibs…
摘自http://gotowqj.iteye.com/blog/1926771 linux动态库加载RPATH, RUNPATH 链接动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置.linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径.同时,Linux也提供了环境变量LDLIBRARYPATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/…
转载自:http://blog.csdn.net/q1302182594/article/details/42102961 1. 三个C文件 1. world.c #include<stdio.h> void world(void) { printf("world.\n"); } 2. hello.c #include <stdio.h> void world(void); void hello(void) { printf("hello\n"…
今天尝试用CodeBlocks写了一个简单的Dll,发现生成的 dll 文件导出的函数名后面都有一个 @xxx 从生成的 libDll2.def 中看到: EXPORTS DllMain@ @ Max@ @ SomeFunction@ @ funReturnStr2@ @ funReturnStr@ @ updateInt2@ @ updateInt@ @ updateStr@ @ 至于为什么导出的函数名后面会带@的解释: _stdcall调用约定的函数会有@,后面的数字表示参数总共所占字节数,…
一.动态库的链接和链接选项-L,-rpath-link,-rpath (1). 现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开, 用户可以通过-L指定连接时库的路径, 通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性. Link-time path -L指定连接时库的路径 -L Run-time path -R(或-rpath)指定程序运行时库的路径 -rpath-link -rpath 比如我们做嵌入…
我的环境: centos6 x64. gcc4.4.7 在使用gcc/g++ 编译程序时我们希望指向一些库是使用静态的链接方式. 另外的一些是动态的方式. 我以boost 为例. 如果我们要使用静态库则是这样的: # g++ main.cpp -lpthread /usr/lib64/libboost_thread.a /usr/lib64/libboost_system.a 静态库直接写路径. 动态前面加-l  这样也可以实现. 但有没有更好的办法呢. 有. 先参考个帖子:http://sta…
写下给自己备忘,在一次使用GCC的过程中发现了原来传递给链接器ld可以同时使用Xlinker和Wl两种命令,这两个命令都可以正确传递给ld作为使用,现在总结下两者的区别. Xlinker后面跟的参数第一个是空格,而Wl后面跟的第一个字符是",". 对于传递“-assert definitions”命令给ld来说,Xlinker要一下子传递两个参数需要写两次“Xlinker”,比如-Xlinker -assert -Xlinker defintions而不能一下子写成-Xlinker &…
-rpath和-rpath-link 假设有3个文件,在同一目录下,有这样的依赖关系 test->liba.so->libd.so 如果编译test的时候这样写 gcc test.c –la warning:libd.so, needed by liba.so not found 解决办法有3个 方法1 gcc test.c –la –ld 方法2 gcc test.c –la -Wl,-rpath-link ./ 这样就告诉编译器,当要寻找liba的依赖库时候,请到 ./去找 方法3 gcc…
// #cgo CFLAGS: -Wall // #cgo LDFLAGS: -Wl,-rpath="/home/liuliang/ffmpeg-build/lib" // #cgo LDFLAGS: -L/home/liuliang/workspace/wetrip_ffmpeg_demuxer/Debug // #cgo LDFLAGS: -L/home/liuliang/workspace/wetrip_ffmpeg_demuxer // #cgo LDFLAGS: -lwetr…
GCC 中 -L.-rpath和-rpath-link的区别 来源 http://blog.csdn.net/q1302182594/article/details/42102961 关于这3个参数的说明,有不少资料,但是看完了还是觉得模糊,分不清它们的区别.本文将用实验的方法去探讨这3个参数的区别. 1.三个.c文件 1.1 world.c #include<stdio.h> void world(void) { printf("world.\n"); } 1.2 hel…
学习C和C++的同学应该都知道,gcc是一款跨平台的C/C++编译器,可以在Linux/Windows平台下使用,具有十分强大的功能,结构也十分灵活,并且可以通过不同的前端模块来支持各种语言,如Java.Fortran.Pascal.Modula-3和Ada的编译.许多有名的工程和库都是使用gcc进行编译的,如nginx,libevent等.今天我们重点介绍gcc组件中可以用来编译C++程序的g++组件的使用. g++可以在命令行使用,也可以通过配置IDE的编译环境来调用系统配置的g++环境,大…
使用phpize编译GD库安装,先安装前置库libjpeg libpng zlib  freetype等 都是下面php编译的几个选项 先看php编译的选项: --with-gd=DIR                   Include GD support. DIR is the GD library base    install directory BUNDLED--with-vpx-dir=DIR            GD: Set the path to libvpx instal…
遇到如下情况,主程序通过dlopen来打开.so文件,但是.so用到了主程序的log函数. 编译so时,通过引用主程序头文件来编译通过,头文件有log函数声明: extern "C" {    void print()  } 在主程序的.c文件里有函数的具体实现. 但是dlopen后运行so中函数时,出现找不到相应的symbol. 这时候就需要在编译主程序ld时加上参数-rdynamic,该参数的作用是:将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号,但不包括静态符号,比如…
Part1 Java Native Interface-JNI-JAVA本地调用 JNI标准是Java平台的一部分, 允许Java代码和其他语言进行交互; 开始实现-> Step 1) 编写Java代码, 编写一个JNI接口HelloJNI.java public class HelloJNI { static { System.loadLibrary("hello"); // hello.dll (Windows) or libhello.so (Unixes) } // A…
先看两篇博文,作为基础知识.如果对C/C++编译链接过程都了解的话,可以跳过不看. http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.cppblog.com/shifan3/archive/2007/01/05/17325.html 一.  编译不同目录下的多个文件 各个文件的布局如下: head.h文件的代码: #ifndef  HEAD_H #define  HEAD_H int add(int a, int…