簡體   English   中英

在 Termux 中運行由 clang 編譯的 C 代碼

[英]Running C code in Termux compiled by clang

直到昨晚,我一直在 Android 上使用 CppDroid 編譯我的代碼。

更新應用程序后,它開始顯示position independent executable錯誤。

我重新安裝了舊版本,但仍然遇到相同的錯誤。

我知道這是 Android 5.0 及更高版本的問題。 但是,CppDroid 是如何工作到昨晚的呢? 誰能給我一個答案或任何線索?

Termux 只提供 Clang。 誰能給我一種成功編譯C代碼的方法?

權限被拒絕錯誤

在此處輸入圖片說明

即使文件模式是0777Android 也不允許通過使用noexec掛載來執行共享存儲上的文件

如果你跑

/system/bin/mount | grep /storage

你會發現這樣的事情:

/data/media on /storage/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,low_uid=1023,low_gid=1023,gid=9997,multi_user,mask=0007,reserved=100MB)
                                                                ^~~~~~

實際掛載點可能會有所不同( /storage/sdcard0 ),但它肯定是用noexec掛載的。

在嘗試執行它之前,您應該將可執行文件移動到 Termux 的主目錄(或 ext4 掛載點中的某個位置)。 這就是 CppDroid 所做的。 它只在內部存儲中運行可執行文件,盡管源代碼可能存儲在任何地方。

如果要在 Termux 中運行,請按照以下步驟操作:

$ cp <your-program> ~/a.out
$ chmod 777 ~/a.out
$ ~/a.out
program output
$

對於“位置無關可執行文件(PIE)”問題,我建議您清除 CppDroid 的數據。 它使用 GCC 作為編譯器,需要-pie選項來生成 PIE 可執行文件。 如果您知道哪些設置搞砸了,您也可以嘗試自己修復。

Termux 提供的 Clang 編譯器默認生成 PIE 可執行文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM