mdo*_*ogg 8 c compiler-construction gcc ncurses static-libraries
我有一些问题静态地将ncurses链接到我的一个程序
这是一个非常简单的示例程序:
#include<ncurses.h>
int main(){
initscr();
printw("Hello world\n");
refresh();
getch();
endwin();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我用它编译它
gcc -static -lncurses hello_curses.c -o curses
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
/tmp/ccwHJ6o1.o: In function `main':
curses_hello.c:(.text+0x5): undefined reference to `initscr'
curses_hello.c:(.text+0x14): undefined reference to `printw'
curses_hello.c:(.text+0x1b): undefined reference to `stdscr'
curses_hello.c:(.text+0x20): undefined reference to `wrefresh'
curses_hello.c:(.text+0x27): undefined reference to `stdscr'
curses_hello.c:(.text+0x2c): undefined reference to `wgetch'
curses_hello.c:(.text+0x31): undefined reference to `endwin'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我有点困惑为什么这不起作用.我在这里错过了什么?
Gil*_*il' 27
您需要-l在命令行的末尾传递选项:
gcc -static hello_curses.c -o curses -lncurses
Run Code Online (Sandbox Code Playgroud)
当编译器遇到时-lfoo,它会链接foo前一个文件请求的所有符号.如果你放在-lfoo开头,还没有请求任何符号,所以没有符号被链接.
编辑:
我认为真正的问题是你需要-l在命令的末尾指定你的选项.我只是按照你的方式尝试它并重现你的错误.如果我放在线-l:libncurses.a的末端然后它工作.所有没有-static选项BTW.
我认为正在发生的事情是你有一个动态的ncurses库,但你已经使用了-static不使用任何动态库的选项.我怀疑你实际上没有静态版本的ncurses库,即一个以.a后缀结尾的版本.
如果要链接ncurses的静态版本(.a)而不是动态版本(.so),则暂时删除libncurses.so的符号链接,以便链接器选择.a文件.或者将.a文件复制到其他位置并将其添加到较早的搜索路径中.
或者,如果您的链接器支持它(例如ld),那么您可以指定-l:libncurses.a而不是-lncurses.
我只是在 ARM 处理器上花了几个小时,试图让它工作,因为接受的答案对我不起作用。
以下是我的发现:
显然
gcc -static hello_curses.c -o curses -lncurses
Run Code Online (Sandbox Code Playgroud)
适用于 x64 处理器,但不适用于 ARM 处理器。
当我尝试使用上面的行时,我仍然收到OP的所有“未定义的引用错误”(以及更多)。
您还需要链接 libtinfo.a,并注意顺序很重要。
这是正确的有效命令行:
gcc -static hello_curses.c -o curses -lncurses -ltinfo
Run Code Online (Sandbox Code Playgroud)
如果你把顺序搞混了,那就不行了……
gcc -static hello_curses.c -o curses -ltinfo -lncurses
Run Code Online (Sandbox Code Playgroud)
对“unctrl”的未定义引用
当然,如果您使用 :lib 语法,这也有效
这编译
gcc -static hello_curses.c -o curses -l:libncursesw.a -l:libtinfo.a
Run Code Online (Sandbox Code Playgroud)
这不能编译
gcc -static hello_curses.c -o curses -l:libtinfo.a -l:libncursesw.a
Run Code Online (Sandbox Code Playgroud)
哦,我多么喜欢 gcc...
这个程序不应该被允许从幼儿园毕业
(.text+0x2a8): 对
cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioninit_pair' 的未定义引用: (.text+0x2ac): 对cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioninit_pair' 的未定义引用: (.text+0x50a): 对 init_pair' 的未定义引用: (.text+0x518): 对init_colortparm' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function的未定义引用_nc_putp' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function': (.text+0x552): 对cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioninit_color 的未定义引用': (.text+0x556): 对cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioninit_color 的未定义引用': (.text+0x5e4): 对tparm' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioninit_color 的未定义引用': (.text+0x5f2): 未定义的引用到_nc_putp' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioncan_change_color': (.text+0x740): 对cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In functioncan_change_color' 的未定义引用: (.text+0x744): 对 has_colors' 的未定义引用cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function: (.text+0x768): 对 has_colors' 的未定义引用cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function: (.text+0x76c):对 color_content' 的未定义引用cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function:(.text+0x7c2):对cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):(.text+0x7c6): more undefined references tocur_term' 的未定义引用遵循 /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw .a(lib_color.o): 在函数_nc_do_color': (.text+0x8de): undefined reference totparm' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o) :在函数_nc_do_color': (.text+0x8e6): undefined reference totputs' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o) 中:在函数_nc_do_color': (.text+0x958): undefined reference totputs' /usr /lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):在函数set_foreground_color': (.text+0x62): undefined reference totputs' /usr/lib/gcc/arm- linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):在函数set_background_color': (.text+0xa2): undefined reference totputs' /usr/lib/gcc/arm-linux-gnueabihf/4.8/ 中。 ./../../arm-linux-gnueabihf/libncursesw.a(lib_hline.o): 在函数whline': (.text+0xec): undefined reference toacs_map' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../.. /arm-linux-gnueabihf/libncursesw.a(lib_hline.o): 在函数whline': (.text+0xf0): undefined reference toacs_map' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/ libncursesw.a(lib_add_wch.o): 在函数wadd_wch': (.text+0x4fe): undefined reference toTABSIZE 中' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o ): 在函数wadd_wch': (.text+0x502): undefined reference toTABSIZE' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o) 中: 在函数wecho_wchar': (.text+0x6d8): undefined reference toTABSIZE' / usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o):在函数wecho_wchar': (.text+0x6dc): undefined reference toTABSIZE' /usr/lib/gcc/arm中-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_wunctrl.o):在函数wunctrl': (.text+0x30): undefined reference tounctrl'collect2中:错误:ld返回1退出状态
| 归档时间: |
|
| 查看次数: |
14037 次 |
| 最近记录: |