JNI 同乙個Module生成多個so

2021-09-24 20:05:49 字數 2124 閱讀 2639

終於解決困擾了我2天的問題!!!那叫乙個激動!!

最近做乙個專案,需要在同乙個模組中同時生成兩個so檔案,剛開始沒覺得怎麼樣,就在乙個cmakelists.txt檔案這麼寫入:

cmake_minimum_required

(version 3.4.1)

# 這是第乙個so

add_library

( a-lib

shared

a.cpp

)# 這是第二個so

add_library

( b-lib

shared

b.cpp

)find_library

( log-lib

log)# 鏈結

target_link_libraries

( a-lib

b-lib$)

as的確幫我生成了2個so,用起來也沒有問題,一切顯得很正常,不過只是表象。

ok,接下來我需要在第二個so中列印時間,測試效率,so我在b.cpp中引入#,使用print:

#include

#define tag "logger"

#define loge(...) __android_log_print(android_log_error, tag, __va_args__)

void

dosomething()

儲存,編譯,結果出現:

undefined reference to '__android_log_print'
另闢蹊徑,新建了乙個模組,單獨把b.cpp檔案拿出來,在新的模組中進行除錯,沒想到編譯竟然通過了,執行也沒有問題,這我才意識到,估計是**有衝突(目前我對c的編譯還不是很熟悉,知道為什麼的朋友麻煩告知一下)!

首先看看我的專案某個模組的結構:

我們cpp下分了2個子資料夾,每個子檔案都有自己的cpp源文件和cmakelists.txt,這裡注意了,每生成乙個so都需要乙個cmakelists.txt檔案。

我們主要看cmakelists.txt內容:

# 模組下cmakelists.txt

# 指定版本

cmake_minimum_required

(version 3.4.1)

# 這裡與參考部落格不一樣

# 新增子資料夾

add_subdirectory

(src/main/cpp/gles)

add_subdirectory

(src/main/cpp/yuv)

# cpp/gles/cmakelists.txt

# 這裡不再需要 cmake_minimum_required

add_library

( gles-lib

shared

gles-lib.cpp

)find_library

( log-lib

log)target_link_libraries

( gles-lib$)

# cpp/yuv/cmakelists.txt

# 這裡不再需要 cmake_minimum_required

add_library

( yuv-lib

shared

yuv-lib.cpp

)find_library

( log-lib

log)target_link_libraries

( yuv-lib$)

編譯,就可以在build資料夾看到生成的so檔案:

雖然問題很小,卻困擾我許久,看來我還得加強在ndk方面的知識!

乙個多socket繫結同乙個埠的測試程式

測試目標 建立多個socket的測試 測試環境 suse linux 測試步驟 建立了3個socket,但是由於繫結了不同的埠,可以邦定成功 假如繫結相同的埠,則相繼失敗。而關閉socket的時候,呼叫shutdown失敗,而close卻可以成功。在stevens的書本中,則建議使用shutdown...

同乙個IP繫結2個網域名稱

technorati 標籤 ip,網域名稱 同乙個ip繫結2個網域名稱 假設已經在isp那裡申請了2個網域名稱www.test1.com www.test2.com,而且都是繫結到伺服器的公網ip是192.168.1.100.test1是apache在本機的乙個應用,訪問url為http 192.1...

js和jQuery 同乙個例項

id dst value 4 諾基亞n85原裝充電器 option value 3 諾基亞原裝5800耳機 option value 7 諾基亞n85原裝立體聲耳機hs 82 option value 9 諾基亞e66 option value 13 諾基亞5320 xpressmusic opti...