找了一會兒,我真的找不到任何相關的結果,所以我自己問這個。我有以下 C 代碼,它試圖nasm通過execve()via執行,/usr/bin/env因此我不必硬編碼可執行檔案的路徑。
#include <unistd.h>
int main(int argc, char**argv) {
char *cmds[10] = {"/usr/bin/env", "nasm", "--version", NULL};
execve(cmds[0], cmds, NULL);
}
在 linux (Ubuntu 18/20) 上,它作業正常:
linux $ gcc test.c && ./a.out
NASM version 2.13.02
linux $
但是,在 macOS(至少是 Catalina)上,我得到以下資訊:
macos $ gcc test.c && ./a.out
env: nasm: No such file or directory
macos $
我不確定有什么區別。我確實安裝了 NASM,我可以nasm --version在我的終端上運行就好了。如果我/usr/local/bin/nasm對execve()呼叫路徑進行硬編碼,它也可以正常作業。如果我嘗試在終端上手動運行以下命令,它似乎也可以作業:
macos $ /usr/bin/env nasm --version
NASM version 2.15.05 compiled on Aug 29 2020
macos $
我想使用的原因是不同作業系統/usr/bin/env的默認安裝位置nasm不同,我不想只是硬編碼路徑。
uj5u.com熱心網友回復:
問題是您使用execve.
e后綴表示你將環境傳遞給系統exec呼叫,但你傳遞的環境是NULL. 這意味著根本沒有環境。
execv改為使用與呼叫程式相同的環境。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427880.html
