導航:首頁 > 操作系統 > 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相關的資料

熱點內容
假的加密鎖靠譜嗎 瀏覽:176
經營聖手伺服器怎麼調 瀏覽:749
arduino手機編程 瀏覽:481
西醫pdf下載 瀏覽:29
後浪電影學院pdf 瀏覽:813
程序員怎麼做到不被人嫉妒 瀏覽:669
cmd新建文件夾md命令 瀏覽:570
php數組中的數值排序 瀏覽:832
安卓手機怎麼避免小孩內購 瀏覽:171
聯想伺服器出現黃色嘆號怎麼辦 瀏覽:991
約翰編譯器製作教程 瀏覽:130
大地pdf 瀏覽:109
pdfplus 瀏覽:577
匯編O命令 瀏覽:970
plt轉pdf 瀏覽:364
魔獸60宏命令大全 瀏覽:478
php志願者網站源碼 瀏覽:874
貿易pdf 瀏覽:497
dbug命令 瀏覽:352
開逛app如何加好友 瀏覽:960