測試jni時,遇到乙個問題,在mac上執行如下命令編譯c程式,可以正常通過編譯。
inc='-i /usr/lib/jvm/jdk1.8.0_20/include -i /usr/lib/jvm/jdk1.8.0_20/include/linux'但是在ubuntu上時遇到編譯無法通過:提示加-fpic重新編譯g++ -shared $inc jni_helloworldimpl.cpp -o hello.so
/usr/bin/ld: /tmp/ccxhy6dg.o: relocation r_x86_64_32 against `.rodata' can not be used when ****** a shared object; recompile with -fpic
經查,-fpic引數用來宣告編譯出來的鏈結庫的**段是可以共享的,-shared引數用來宣告把**編譯為共享庫。
加上 -fpic 引數,**可以正常編譯,不知為何mac不需要這個引數。
linux C C 之庫編譯靜態庫 共享庫
我們在編寫乙個c語言程式的時候,經常會遇到好多重複或常用的部分,如果每次都重新編寫固然是可以的,不過那樣會大大降低工作效率,並且影響 的可讀性,更不利於後期的 維護。我們可以把他們製作成相應的功能函式,使用時直接呼叫就會很方便,還可以進行後期的功能公升級。例如我要在一段 中多次交換兩個變數的值,我可...
共享庫的編譯及使用
靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大,一般以lib x.a形式存在。共享庫的 是在可執行程式執行時才載入記憶體的,在編譯過程中僅簡單的引用,因此 體積較小,一般以lib x.so的檔案形式存在。庫是別人寫好的現有的,成熟的,可以復用的 實際專案開發中,每個程式都要依賴很多基礎的底...
編譯live555共享庫
1.編譯x86下的live555共享庫 tar zxvf live.2014.08.26.tar.gz cd live genmakefiles linux gedit basicusageenvironment makefile 修改如下變數後儲存退出 prefix usr local x86 3...