- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道 Stackoverflow 上有很多关于此的主题,但没有一个解决方案对我有帮助。我将 Ubuntu 18.04 与开发人员通常需要的所有东西一起使用:build-essential, libreadline-dev, ...
我查看了 /usr/include/readline
但 readline 肯定在那里!gcc 总是告诉我:
undefined reference to "readline"
顺便说一句,无论我是否使用“-lreadline”链接,这都是独立发生的。
编辑
作为用户@Kamil Cuk 已经提供了简单的解决方案,我想添加更多信息:
$ gcc -lreadline -o code code.c
在 MacOS 上工作,使用 apple-gcc(使用 clang)以及 gnu-gcc(通过 brew 安装)。只有在 Ubuntu 上,链接器标志必须在“code.c”之后
(可能是因为 Ubuntu 使用 gcc-7 而在我的 Mac 上我使用 gcc-8)
编辑结束
code.c
#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
int main(void) {
char * buffer = readline("enter sth: ");
printf("%s\n", buffer);
printf("bye!\n");
}
libreadline-dev 包信息
dpkg -L libreadline-dev
/.
/usr
/usr/include
/usr/include/readline
/usr/include/readline/chardefs.h
/usr/include/readline/history.h
/usr/include/readline/keymaps.h
/usr/include/readline/readline.h
/usr/include/readline/rlconf.h
/usr/include/readline/rlstdc.h
/usr/include/readline/rltypedefs.h
/usr/include/readline/tilde.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libhistory.a
/usr/lib/x86_64-linux-gnu/libreadline.a
/usr/share
/usr/share/doc
/usr/share/info
/usr/lib/x86_64-linux-gnu/libhistory.so
/usr/lib/x86_64-linux-gnu/libreadline.so
/usr/share/doc/libreadline-dev
gcc 命令
$ gcc -L/usr/lib/x86_64-linux-gnu -lreadline -Wall -Werror -v -o code code.c
gcc 错误输出
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-27ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)
COLLECT_GCC_OPTIONS='-L/usr/lib/x86_64-linux-gnu' '-Wall' '-Werror' '-v' '-o' 'code' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/cc1 -quiet -v -imultiarch x86_64-linux-gnu code.c -quiet -dumpbase code.c -mtune=generic -march=x86-64 -auxbase code -Wall -Werror -version -fstack-protector-strong -Wformat-security -o /tmp/ccLBo26t.s
GNU C11 (Ubuntu 7.3.0-27ubuntu1~18.04) version 7.3.0 (x86_64-linux-gnu)
compiled by GNU C version 7.3.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.19-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
GNU C11 (Ubuntu 7.3.0-27ubuntu1~18.04) version 7.3.0 (x86_64-linux-gnu)
compiled by GNU C version 7.3.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.19-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c8081a99abb72bbfd9129549110a350c
COLLECT_GCC_OPTIONS='-L/usr/lib/x86_64-linux-gnu' '-Wall' '-Werror' '-v' '-o' 'code' '-mtune=generic' '-march=x86-64'
as -v --64 -o /tmp/ccqaH7jD.o /tmp/ccLBo26t.s
Die GNU-Assembler-Version 2.30 (x86_64-linux-gnu) benutzt die BFD-Version (GNU Binutils for Ubuntu) 2.30
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-L/usr/lib/x86_64-linux-gnu' '-Wall' '-Werror' '-v' '-o' 'code' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccYuIgyM.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o code /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. -lreadline /tmp/ccqaH7jD.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
/tmp/ccqaH7jD.o: In Funktion »main«:
code.c:(.text+0x10): Warnung: undefinierter Verweis auf »readline«
collect2: error: ld returned 1 exit status
我尝试了互联网上提供的几种解决方案,例如以下链接,但均无效:
How do I properly reference the GNU readline library to scan terminal input?
-L/usr/local/lib -I/usr/local/include
https://www.linuxquestions.org/questions/programming-9/undefined-reference-to-readline-494533/
#include "/usr/include/readline/readline.h"
有人知道吗?
(顺便说一句,可能并不重要:readline 在我的 Mac 上有效,但在我的 Ubuntu 虚拟机中无效)
最佳答案
gcc .... code.c .... -lreadline
来自 gcc link options :
-l library
-llibrary
...
It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after file foo.o but before bar.o. If bar.o refers to functions in ‘z’, those functions may not be loaded.
关于c - ubuntu 18.04 上的 c 文件中对 "readline"的 undefined reference (已安装 libreadline-dev,与 "-lreadline"链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507756/
在各种基于 GNU Readline 的 CLI 上工作,它会显着如果有办法有括号和引号,请加快我的速度键入时自动关闭。 因此在 Bash(或其他 CLI)上键入 ' 或 ( 实际上会附加结束引号或括
我正在编写一个 C 程序,它向用户提供一个“伪终端”,用户可以在其中输入特殊命令,并且还需要监听来自 UDP 套接字的数据。 目前我正在使用 select() 调用来选择 STDIN 和套接字句柄。当
我正在使用 Simplicity Studio 为我的应用程序生成代码。它会自动生成一个 Makefile,我能够构建在我的主机 amd64 ubuntu 16.02 上运行的应用程序。 现在我想构建
这是我正在创建的 shell 的一部分。我在使用 libreadline 时遇到了一些问题,因为当加载 shell 时我尝试使用自动完成(因此按 TAB)进入目录,在我按回车键后我访问了该目录但是在打
使用 GNU 时,我在从源代码构建 cURL 和 Git 时遇到问题 Readline 7 。当配置像 cURL 这样的库时,结果是: $ ./configure ... ... checking t
我是 Red 编程语言的新手。 我尝试通过下载 Linux 二进制文件来测试它。但是当我在控制台上执行它时,我收到一条错误消息: root@xxx-linux:/home/xxx/Downloads#
我最近像这样重新安装了 ruby 2.1.2,因为我想安装一个 gem (ruby-debug-ide) sudo rvm reinstall 2.1.2 --disable-binary --w
我用 C 构建了一个程序,它是一个控制台,我使用 libreadline 来帮助我构建这个控制台。一切正常,但当我收到 ctrl-d 时,出现段错误。 我能弄清楚如何处理这个问题,我曾尝试使用 sig
我正在尝试设置 deepmind/dqn 的环境,https://github.com/deepmind/dqn , 我运行 ./install_dependencies.sh 来安装 LuaJIT
在使用 readline(阻塞)进行用户输入时,我想从另一个线程异步地将文本行输出到控制台。此外,我希望从控制台中删除 readline 提示和当前部分输入行,写入输出行,然后恢复 readline
当我尝试运行 rails console 时,出现此错误: /Users/TuzsNewMacBook/.rvm/gems/ruby-2.3.7/gems/bootsnap-1.3.2/lib/boo
我刚刚用自制软件安装了 posgresql,当我继续输入命令时 psql 我收到以下错误: dyld: Library not loaded: /usr/local/opt/readline/lib/
我尝试运行我的 rails c 但出于某种原因,我收到此错误: https://gist.github.com/anonymous/166713e8cde860fb188a8dffb98a1563 ᐅ
在 MacOS Mojave 上从 Homebrew 安装 pyenv 后,我在尝试安装任何 python 版本时遇到构建错误。 当为任何版本运行 pyenv install 时,构建将失败并出现错误
我试图安装 Valet,但由于错误,我从 brew 中卸载了 php,现在我重新安装了 php,如果我转到 apache 上的 phpinfo() 文件,我可以看到 PHP Version 7.1.2
启动 django 或 ipython notebook 时出现以下问题 /opt/bitnami/python/bin/.python2.7.bin:加载共享库时出错:libreadline.so.
当我在终端中运行“rails c”命令时,不知何故它不会启动 rails 控制台并抛出错误。我正在使用 rbenv 运行 rails 5.2.2。 rails c 它引发以下错误。 Running v
我知道 Stackoverflow 上有很多关于此的主题,但没有一个解决方案对我有帮助。我将 Ubuntu 18.04 与开发人员通常需要的所有东西一起使用:build-essential, libr
当我尝试在 Xcode 上构建和运行我的 iOS 应用程序时出现此错误,我尝试重新启动我的 Mac 没有任何效果然后我搜索了其他错误 dyld: Library not loaded:/usr/loc
我是一名优秀的程序员,十分优秀!