dialog - gcc 对话框库未链接
问题描述
我正在尝试使用 C 中的对话框库(linux 中的对话框命令)开发一个小型实用程序。
在 fedora linux 上工作正常,但如果我尝试在 debian 上使用以下命令编译它:
gcc -ldialog -lncurses -I/usr/include dialog_test.c
我收到以下错误:
vetinari@ankhmorpork:~/Projects/Other/test$ gcc -ldialog -I/usr/include dialog_test.c
/usr/bin/ld: /tmp/ccX6fPYB.o: warning: relocation against `dialog_vars' in read-only section `.text'
/usr/bin/ld: /tmp/ccX6fPYB.o: in function `main':
dialog_test.c:(.text+0x5c): undefined reference to `init_dialog'
/usr/bin/ld: dialog_test.c:(.text+0x79): undefined reference to `dialog_yesno'
/usr/bin/ld: dialog_test.c:(.text+0xae): undefined reference to `dialog_menu'
/usr/bin/ld: dialog_test.c:(.text+0xbc): undefined reference to `dialog_vars'
/usr/bin/ld: dialog_test.c:(.text+0xc5): undefined reference to `end_dialog'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
对话框命令工作正常。
任何人都知道为什么它不能在 debian 上运行?
解决方案
(为了wiki的缘故回答,以防以后有人来这里)
您必须将要链接的库放在 gcc 命令的末尾,如下所示:
gcc dialog_test.c -ldialog -lncurses
原因在这里解释:链接器查找符号的方式必须首先查看引用,然后是提供符号的库
此外,对话框库可能具有除ncurses
. 这里有解释如何找出要包含的内容和链接的内容,简而言之:dialog-config
应该告诉你。在这种特定情况下,对我有用的(ubuntu 20.04)是链接ncursesw
而不是ncurses
.
在那之后,我留下了一个
undefined reference to `sqrt'
链接器错误,可以通过使用-lm
.
所以,总的来说,这个命令有效:
gcc dialog_test.c -ldialog -lncursesw -lm
推荐阅读
- swift - 如何对 URL 进行编码以在 Swift 中传递百分比 (%) 符号?
- java - 使用 EntityManager NativeQuery 生成一个自增数并将数据插入 Oracle DB
- java - java - 如何在java中使用扫描仪重复更改变量计数?
- javascript - 我正在尝试使用 HighChart 地图和实体量规,它们都可以独立地为我的数据工作,但是在将它们放在文件中时会出现很多错误
- python - 使用人工输入增强预学习模型以更好地使用 python 确定图像相似度
- sql - 检查列是否具有任何扩展属性
- javascript - 循环更改文档中的所有 alt="" 值
- prolog - Prolog 变量没有按预期统一
- c++ - WinApi压缩、python3中的解压
- loops - WaitGroup 不受双重尊重