linux动态链接库(linux动态链接)
linuxc編程調(diào)用系統(tǒng)的動態(tài)庫時,要使用dlopen等函數(shù)嗎?
linux調(diào)用庫的方式有三種:
1.靜態(tài)鏈接庫
2.動態(tài)鏈接庫
3.動態(tài)加載庫
其中1,2都是在編程時直接調(diào)用,在鏈接時加參數(shù)-l進行鏈接
第三種需要在編程時使用dlopen等函數(shù)來獲取庫里面函數(shù)的定義,然后進行調(diào)用.
不過對于沒有提供頭文件的動態(tài)庫,只能dlopen等函數(shù)來調(diào)用
如何更新linux系統(tǒng)動態(tài)鏈接庫/usr/local/lib/usr/lib?
可以放在當前目錄下,但是要設(shè)置一下庫文件的路徑:LD_LIBRARY_PATH=./:/usr/local/pet20/lib:/lib/:/usr/local/lib export LD_LIBRARY_PATH 這樣,在調(diào)用的時候就會自動從當前目錄找。
如果是顯式調(diào)用則不用,只要在程序里指定.so的文件路徑就可以了。所以放在當前目錄下也是沒問題的。
cpp文件是怎么變成可執(zhí)行文件的?動態(tài)鏈接庫又是什么呢?
1.cpp是編譯產(chǎn)生2進制代碼,這個2進制代碼就是exe
2.qt庫就是一大堆已經(jīng)寫好的函數(shù),跟你引用
3.makefile是用來幫助計算機編譯C源文件的。在linux里面比較常用,告訴了計算機,要編譯我的C源文件,需要什么版本的編譯器,需要什么包,什么頭文件,如果不滿足就提示,如果滿足就編譯,還記錄了C源文件的位置(因為不止一個),編譯之后放到哪。等等。
4.靜態(tài)鏈接庫是lib,在編譯的時候,將里面的代碼直接寫入exe中,隨身帶。
dll因為里面東西比較通用,一般電腦都有,所以在用的時候從系統(tǒng)里面拿就行。于是就不寫這部分了,只標記在哪個dll里面。
如何在macosx中創(chuàng)建動態(tài)鏈接庫?
創(chuàng)建動態(tài)鏈接庫:
1、生成module文件,也就是.o文件。這跟一般的Linux沒什么區(qū)別。 cc -c a.c b.c 就得到a.o和b.o
2、用ld來合并.o文件 ld -r -o c.o a.o b.o 這個也沒什么特別。
3、用libtool來創(chuàng)建動態(tài)鏈接庫。 libtool -dynamic -o c.dylib a.o b.o ( 這里也可以用libtool -static -o c.a a.o b.o就創(chuàng)建靜態(tài)庫) 如果用gcc直接編譯,linux下一般是: gcc -shared -o c.so a.c b.c 而在Mac OS X下需要: gcc -dynamiclib -o c.dylib a.c b.c 這往往也是向Mac OS X移植unix程序常出問題的地方。如果用autoconf/automake等工具,出錯的幾率應(yīng)該小一些。 訪問動態(tài)鏈接庫: 1、nm是最常用的,這個用法跟linux下差不多 nm c.dylib 可以看到導(dǎo)出符號表,等等。 2、另一個常用的工具是otool,這個是Mac OS X獨有的。比如想看看c.dylib的依賴關(guān)系 otool -L c.dylib 對Framework的理解: Framework是Mac OS X下必不可少的部分,不妨去看看/System/Library/Frameworks/下面,一大堆Framework。Framework是dylib的進一步演化,它把頭文件、文檔、動態(tài)鏈接庫等整合成一個有機的目錄,類似一種自描述的方式,這種做法其實在Mac OS X下隨處可見。比如應(yīng)用程序,一般都是一個目錄,譬如/Applications/iTunes.app目錄對應(yīng)應(yīng)用程序iTunes,雙擊這個目錄即開始執(zhí)行。這種做法和Windows下常見的一個exe/dll打天下很不相同。 Framework的創(chuàng)建工具也是libtool,詳細用法參考man。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 這里介紹一下怎么開發(fā)最簡單的Cocoa程序,這個程序?qū)嵲谑翘唵?因為如果你用Xcode的話,選用Cocoa Foundation Command Tool的話,應(yīng)該不用寫任何代碼, 但是這里是為了向大家介紹一下,這個最簡單的程序是如何通過gcc編譯成功的,當然里面還有一個東西可以做一點解釋. 先看看源代碼: #import
linux重啟后無法連接22端口?
ssh服務(wù)嗎??1. 可能ssh服務(wù)沒有開機啟動2. iptables設(shè)置問題3. 靜態(tài)IP還是動態(tài)
總結(jié)
以上是生活随笔為你收集整理的linux动态链接库(linux动态链接)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: formlayout_精简SWT For
- 下一篇: 安卓键盘输入法怎么切换(安卓键盘输入)