导航:首页 > 操作系统 > rpathlinux

rpathlinux

发布时间:2023-03-23 14:52:36

1. 64位linux系统编译程序时可以链接32位的库吗

64位可以编32位的程序出来,在各种FLAGS中增加 -m32 编出来的就是32位程序,连接时自然是找32位的共享库
这个要看发行版对32位支持的实现,比如gentoo下如果开abi支持双架构那很可能悲剧,因为有些包还没跟上,如信激果用binary的32位库又会因为版本不同出现莫名其妙的问题,比如fontconfig的坑。
伏模我在64位编32位程序都是使用chroot的方法,这样就可以把32位的头文件库什么的全放在某个地方。我用的是ubuntu,32位库和64位库位置不一样,一般可以直接安装32位的库,如果遇到某些比较特殊的库,一般都可缺坦缓以通过重新编译增加rpath解决,如果没源码也可以用patchelf直接给elf上rpath。

2. linux下编译出现warning :ld-linux.so.3,needed by

需要这个动态库libstdc++.so,因为没有找到。
当然也可以加参数帮助编译器找-rpath或者-rpath-link。
还是多学习一下编译器的友团蔽链接的原理。推荐看看bison源代码分析,好州以便写的代码一次性通过。
不至于出现这或返样那样的错误。

3. linux下ld连接SO文件时如何制定绝对路径

连接器使用下面的搜索路径来定位需要的共享库: 1. 所有由"-rpath-link"选项指定的搜索路径. 2. 所有由"-rpath"指定的搜索路径. “-rpath"跟"-rpath_link"的不同之处在于,由"-rpath"指定的路径被包含在可执行文件中,并在运行时使用, 而"-rpath-link"选项仅仅在连接时起作用. 它只用于本地连接器. 3. 在一个ELF系统中, 如果"-rpath"和"rpath-link"选项没有被使用, 会搜索环境变量"LD_RUN_PATH"的内容.它也只对本地连接器起作用. 4. 在SunOS上, “-rpath"选项不使用, 只搜索所有由"-L"指定的目录. 5. 对于一个本地连接器,环境变量"LD_LIBRARY_PATH"的内容被搜索. 6. 对于一个本地ELF连接器,共享库中的`DT_RUNPATH"和`DT_RPATH"操作符会被需要它的共享库搜索. 如果"DT_RUNPATH"存在了, 那"DT_RPATH"就会被忽略. 7. 缺省目录, 常规的,如"/lib"和"/usr/lib". 8. 对于ELF系统上的本地连接器, 如果文件"/etc/ld.so.conf"存在, 这个文件中有的目录会被搜索.
如上所述,可以用"-rpath-link","-rpath",或者文件"/etc/ld.so.conf"来指定。

4. Linux 查看依赖库

1.查看依赖的库:
objmp -x xxx.so | grep NEEDED

2.查看可执察慧宴行程序依赖的库:
objmp -x 可执行程序名败银 | grep NEEDED

3.查看缺少的库:
ldd xxx.so
4.查看库版本编译等信息:
strings xxx.so
-L -rpath -rpath-link 添加碧铅动态库路径

5. 嵌入式linux程序开机自启动时找不到动态库,求各位大神帮忙。。。。

原因是rcS
比/etc/profile先运行,rcS是一耐森开机第一个运行的,这时候你的库还没有被连进来昌判亩冲陪。
建议把./myXX
放在/etc/profile
的末尾。或者在./myXX这前source
/etc/profile.

6. linux中把.c的文件编译成.so

就跟用VS编译dll或者lib文件差不多,把代码编译完成以后,命名为相应的后缀就好了。

例如:
gcc -c -fPIC libst.c
生成 libst.o

然后
gcc -shared -fPIC -o libst.so libst.o
生成 libst.so 动态链接库

把libst.so拷贝到系统默认库目录下,比如 /lib, /usr/lib 下
假定有 test.c 要引用这个库
gcc -lst -o test test.c
然后就可以了

假如不能把libst.so拷贝到默认库目录下,比方说放在了
/home/aaa/lib 下
那么就用这样的语句来编译test.c
gcc -L/home/aaa/lib -lst -Wl,-rpath=/home/aaa/lib -o test test.c

7. 编译时找不到动态库

报错:

分析:
  应该是动态库链接的库位置不对,默认在目录usr/lib/ 下查找动态库。

方式一 用ln -s建立创建软连接,确保/usr/lib下存在库。
  ln -s /绝对路径/源 /绝对路径/目的
方式二键誉州 编译时使用-rpath 或者-rpath-link,例虚毕如如下gcc编译时设置
mips64el-redhat-linux-gcc -o test *.c -Wall -L./lib/mips64le/ -lpthread -lm -Wl,-rpath=/usr/稿蔽local/gcc-4.8.3-d197-n64-loongson/usr/mips64el-redhat-linux/lib64/

挂载命令的顺序

8. linux编译的c++程序位置

linux系统编神差孙译C++程序时头⽂件和库⽂件搜索路径

C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include < headfile.h>从系统默认路径查找头⽂件。先

前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:

-bash-3.2$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。

头⽂件:

1. #include“headfile.h”

搜索顺序为:

①先搜索当前⽬录

②然后搜索-I指定的⽬录

③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)

④最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

各⽬录存在相同⽂件时,先找到哪个使⽤哪个。

2. #include<headfile.h>

①先搜索-I指定的⽬录

②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH

③最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

与上⾯的相同,各⽬录存在相同⽂件时,先找到哪个使⽤哪游链个。这⾥要注意,#include<>⽅式不会搜索当前⽬录!

这⾥要说下include的内定⽬录,它不是由$PATH环境变量指定的,⽽是由g++的配置prefix指定的(知道它在安装g++时可以指定,不知安

装后如何修改的,可能是修改配置⽂件,需要时再研究下):

-bash-3.2$ g++ -v

Using built-inspecs.

Target:x86_64-redhat-linux

Configured with:../configure --prefix=/usr --mandir=/usr/share/man--infodir=/usr/share/info --enable-shared --enable-threads=posix--enable-checking=release --with-system-zlib --enable-__cxa_atexit--disable-libunwind-exceptions --enable-libgcj-multifile--enable-languages=c,c++,objc,obj-c++,java,fortran,ada--enable-java-awt=gtk --disable-dssi --enable-plugin--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre--with-cpu=generic --host=x86_64-redhat-linux

Thread model:posix

gcc version 4.1.2 20080704(Red Hat 4.1.2-46)

在安装g++时,指定了prefix,那么内定搜索⽬录就是:

Prefix/include

Prefix/local/include

Prefix/lib/gcc/--host/--version/include

编译时可以通过-nostdinc++选项屏蔽对内定⽬录搜索头⽂件。

库⽂件:

编译的时候:

①gcc会去找-L

②再找gcc的环境变量LIBRARY_PATH

③再找内定⽬录/lib /usr/lib/usr/local/lib 这是当初compilegcc时写在程序内的(不可配置的?)

运⾏时动态库的搜索路径:

动态库的搜索路径搜索的先后顺序是:

①编译⽬标代码时指定的动态库搜索路径(庆迹这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间⽤冒号":"分隔)

②环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间⽤冒号":"分隔)

③配置⽂件/etc/ld.so.conf中指定的动态库搜索路径;

④默认的动态库搜索路径/lib;

⑤默认的动态库搜索路径/usr/lib。

(应注意动态库搜寻路径并不包括当前⽂件夹,所以当即使可执⾏⽂件和其所需的so⽂件在同⼀⽂件夹,也会出现找不到so的问题,类同#include<header_file>不搜索当前⽬录)


5
网络文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
linux系统编译C++程序时头文件和库文件搜索路径
linux系统编译C++程序时头⽂件和库⽂件搜索路径

C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include < headfile.h>从系统默认路径查找头⽂件。先

前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:

-bash-3.2$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

第 1 页
全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。

头⽂件:

1. #include“headfile.h”

搜索顺序为:

①先搜索当前⽬录

②然后搜索-I指定的⽬录

③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)

展开全文

限免
导长图
转存到网盘
发送至微信
下载文档
北京网络网讯科技有限公司 版本号8.0.70

9. 求助,Linux系统安装php,报错!

请用 ./configure 还有就是你那一堆换行连接符 有问题 ,./configure 是autoconf 生成的一个对应不同的环境进行配置的一个shell 文件,如果你还是报错,那么检查你后面with的那一堆php扩展的依赖,一般你with 那么多是安装不过的 。

10. linux centos7.4 php7.1.31安装

yum -y install gcc-c++

groupadd httpd

useradd -g httpd httpd

yum install libxml2 -y

yum install libxml2-devel -y

yum install libcurl-devel -y

yum -y install libjpeg-devel libpng-devel

//字体

yum install freetype-devel -y

yum -y install openssl openssl-devel

yum -y install php-mcrypt limcrypt libmcrypt-devel

tar -zxvf php-7.0.1.tar.gz

./configure --prefix=/usr/local/php --with-iconv --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --enable-ftp --with-jpeg-dir --with-freetype-dir --with-png-dir --enable-fpm --with-fpm-user=httpd --with-fpm-group=httpd --with-pdo-mysql --with-mysqli --with-mcrypt=/usr/local/ --enable-opcache=no

make && make install

配置环境变量

export PATH=$PATH:/usr/local/php/bin

export PATH=$PATH:/usr/local/php/sbin

然后立马生效,执行

source /etc/profile

cp php.ini-proction /usr/local/php/lib/php.ini

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

修改php.ini

vi /usr/local/php/lib/php.ini

date.timezone = "Asia/Shanghai"

阅读全文

与rpathlinux相关的资料

热点内容
python闹钟怎么打 浏览:686
虚拟主机服务器有什么区别 浏览:831
算法与程序的奥秘章节检测 浏览:377
找pdf 浏览:527
与服务器连接断开如何处理 浏览:831
服务器维修预计十分钟什么意思 浏览:168
黑马程序员主打教学是什么 浏览:39
python九乘法表怎么编写 浏览:972
思维方式pdf 浏览:654
tcc社区app怎么注册 浏览:937
央视网下载加密 浏览:452
命令行访问服务器 浏览:36
梁加密区箍筋是不是必须封闭箍筋 浏览:760
在百度地图如何定位服务器地址 浏览:570
单片机计数器中断 浏览:296
哈啰安装文件夹名称 浏览:294
解压视频声控用杯子玩泡沫 浏览:740
19年的普通安卓机怎么样了 浏览:604
如何在app上刷导游题目 浏览:861
子弹解压视频大全 浏览:323