c編譯成so
⑴ 怎樣把.c文件編譯成.so文件
比如有一個test.c文件,我想打包成動態庫test.so,
直接gcc
test.c
-o
test.o
-fpic
gcc
-o
test.so
test.o
-shared
使用的時候發布.so和頭文件即可。
鏈接的時候要記得丟在默認目錄或者將其所在目錄聲明到環境變數,不然有時候會提示找不到這個庫文件。
⑵ 在MACOX上的ANDROIDSTUDIO如何編譯OPENSSL原生的C庫成動態的.SO庫
目前暫不支持開發工具編譯C、c++代碼生成so文件,應該後續版本會有的。
.so 為共享庫,是shared object,用於動態連接的,和dll差不多,可以這樣調用so文件:
調用 System.out.println(System.getProperty("java.library.path"));
得到/usr/java/jdk1.5.0_13/jre/lib/i386,將SO文件放在該目錄下
運行java程序,輸出了由c語言函數計算出的結果
⑶ 有個 c 文件,如何才能將其編譯成動態鏈接庫
有二個文件,一個 test.h, 一個 test.c
//test.h
#pragmaonce
#ifdef__cplusplus
extern"C"{
#endif
intadd(inta,intb);
#ifdef__cplusplus
}
#endif
//test.c
#include"test.h"
intadd(inta,intb)
{
returna+b;
}
編譯,生成動態鏈接庫:
#gcc-g3-Wall-fPIC-shared-olibtest.sotest.c
#ls-l
-rwxr-xr-x1rootroot14618Jul2413:44libtest.so
-rw-r--r--1rootroot63Jul2413:43test.c
-rw-r--r--1rootroot106Jul2413:43test.h
#nmlibtest.so
00000000002006e8a_DYNAMIC
0000000000200890a_GLOBAL_OFFSET_TABLE_
w_ITM_deregisterTMCloneTable
w_ITM_registerTMCloneTable
w_Jv_RegisterClasses
00000000002006c8d__CTOR_END__
00000000002006c0d__CTOR_LIST__
00000000002006d8d__DTOR_END__
00000000002006d0d__DTOR_LIST__
00000000000006b8r__FRAME_END__
00000000002006e0d__JCR_END__
00000000002006e0d__JCR_LIST__
00000000002008b8d__TMC_END__
00000000002008b8A__bss_start
w__cxa_finalize@@GLIBC_2.2.5
0000000000000620t__do_global_ctors_aux
0000000000000550t__do_global_dtors_aux
00000000002008b0d__dso_handle
w__gmon_start__
00000000002008b8A_edata
00000000002008c8A_end
0000000000000658T_fini
0000000000000468T_init
0000000000000600Tadd
00000000000004a0tcall_gmon_start
00000000002008b8bcompleted.6557
00000000000004c0tderegister_tm_clones
00000000002008c0bdtor_idx.6559
00000000000005d0tframe_mmy
0000000000000500tregister_tm_clones
⑷ 怎樣把.c文件編譯成.so文件
.so是linux用的
所以 要生成so 需要用gcc
和生成可執行文件類似,只是增加一些編譯選項
命令如下
gcc SOURCE_FILES -fPIC -shared -o TARGET
SOURCE_FILES可以是.c文件,也可以是經過-c編譯出來的.o文件
TARGET為so文件。
⑸ 如何在Eclipse中如何用cygwin把C文件編譯成so文件
用cygwin把C文件編譯成so文件:
1:首先,要准備好一個jni文件夾,裡麵包含三個文件:
makefile文件:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=test-jni
LOCAL_SRC_FILES := test-jni.c
include $(BUILD_SHARED_LIBRARY)
如果有多個文件,可能有所不同吧,尚未嘗試。
頭文件:最好使用javah命令來生成,可見我的上一篇文章;
源文件:根據頭文件,完善源碼。
2:將jni文件夾拷貝到Android項目目錄下
3:運行cygwin,使用CD命令,切換目錄到Android項目目錄
4:輸入命令$NDK/ndk-build,屏幕顯示如下:
$ $NDK/ndk-build
Cygwin : Generating dependency file converter script
Compile thumb : test-jni <= test-jni.c
SharedLibrary : libtest-jni.so
Install : libtest-jni.so => libs/armeabi/libtest-jni.so
表示生成成功。
⑹ linux中把.c的文件編譯成.so
首先
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
⑺ C/C++源文件直接交叉編譯生成.so文件供安卓應用程序調用,可以嗎
Jni調用就行了,是要按規則寫介面api,如果介面很多,也沒法,那是你的業務問題,要重新設計業務邏輯。我們之前用的c++單獨交叉編譯一個進程,和安卓界面用tcp通信,如果介面多也以為著協議多,一樣的。
⑻ linux下如何用c++編譯so文件,c語言又怎樣調用這個so文件
根據相應的頭文件、和鏈接使用的庫文件,編譯鏈接後,即是可以使用該.so文件了
~~~~~~~
⑼ 用cc怎樣把.c文件編譯成.so文件
比如有一個test.c文件,我想打包成動態庫test.so,
直接gcc test.c -o test.o -fPIC
gcc -o test.so test.o -shared
使用的時候發布.so和頭文件即可。
鏈接的時候要記得丟在默認目錄或者將其所在目錄聲明到環境變數,不然有時候會提示找不到這個庫文件。
⑽ linux下c語言編譯so問題
不需要在自己的.so中調用別人的.so,只需要編譯自己的,編譯.so時,系統不會檢查未定義的函數。
直接在編譯自己的應用程序時鏈接這兩個.so就可以了!
gcc
-o
exec_file
mysrc.c
-L./
-lXXX
-L/usr/lib
-lmysqlclient