gpt4 book ai didi

c - 可加载的 Bash 内置

转载 作者:太空狗 更新时间:2023-10-29 17:05:35 25 4
gpt4 key购买 nike

我正在编写一个 strcmp bash 内置函数。它编译得很好,但是当我尝试启用它时,我得到:

$ enable -f ./strcmp strcmp
bash: enable: cannot open shared object ./strcmp: ./strcmp: only ET_DYN and ET_EXEC can be loaded

我内置的主要部分:

strcmp_builtin (list)
WORD_LIST *list;

char *strcmp_doc[] = {
(char *)NULL
};

struct builtin strcmp_struct = {
"strcmp", /* builtin name */
strcmp_builtin, /* function implementing the builtin */
BUILTIN_ENABLED, /* initial flags for builtin */
strcmp_doc, /* array of long documentation strings. */
"strcmp 'string 1' 'string 2'", /* usage synopsis; becomes short_doc */
0 /* reserved for internal use */
};

编译行(来自扩展的 make 文件):

~/bash-4.2/examples/loadables $ gcc -fPIC -DHAVE_CONFIG_H -DSHELL \
-g -O2 -I. -I.. -I../.. -I../../lib -I../../builtins -I../../include \
-I~/bash-4.2 -I~/bash-4.2/lib -I~/bash-4.2/builtins -c \
-o strcmp strcmp.c

我用谷歌搜索了 ET_DYN 和 ET_EXEC,只找到了指向此类问题的链接。

最佳答案

您是否注意到 -c 标志?这使它无法链接。将其替换为 -shared,如@shr 所述

关于c - 可加载的 Bash 内置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com