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