使用LDFLAGS链接到特定的库版本

问题描述 投票:0回答:1

我需要分别使用ncursesw5和ncursesw6交叉编译程序。我在ncursesw6随附的Debian Buster中。所以我跑了apt install libncursesw5:i386 libncursesw5-dev:i386

然后我尝试运行

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32 /usr/lib/i386-linux-gnu/libncursesw.so.5"

但是,当我运行ldd ./program时,我得到了两个库。

linux-gate.so.1 (0xf7f8c000)
libncursesw.so.5 => /lib/i386-linux-gnu/libncursesw.so.5 (0xf7e91000)
libncurses.so.6 => /lib/i386-linux-gnu/libncurses.so.6 (0xf7e49000)
libtinfo.so.6 => /lib/i386-linux-gnu/libtinfo.so.6 (0xf7e20000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7c21000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7c1b000)
libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xf7bf6000)
/lib/ld-linux.so.2 (0xf7f8e000)

这是dpkg看到的:

$ dpkg -l | grep curses

ii  libncurses-dev:amd64          6.1+20181013-2+deb10u2      amd64        developer's libraries for ncurses
ii  libncurses-dev:i386           6.1+20181013-2+deb10u2      i386         developer's libraries for ncurses
ii  libncurses5:i386              6.1+20181013-2+deb10u2      i386         shared libraries for terminal handling (legacy version)
ii  libncurses6:amd64             6.1+20181013-2+deb10u2      amd64        shared libraries for terminal handling
ii  libncurses6:i386              6.1+20181013-2+deb10u2      i386         shared libraries for terminal handling
ii  libncursesw5:i386             6.1+20181013-2+deb10u2      i386         shared libraries for terminal handling (wide character legacy version)
ii  libncursesw5-dev:amd64        6.1+20181013-2+deb10u2      amd64        transitional package for libncurses-dev
ii  libncursesw5-dev:i386         6.1+20181013-2+deb10u2      i386         transitional package for libncurses-dev
ii  libncursesw6:amd64            6.1+20181013-2+deb10u2      amd64        shared libraries for terminal handling (wide character support)
ii  libncursesw6:i386             6.1+20181013-2+deb10u2      i386         shared libraries for terminal handling (wide character support)
ii  ncurses-base                  6.1+20181013-2+deb10u2      all          basic terminal type definitions
ii  ncurses-bin                   6.1+20181013-2+deb10u2      amd64        terminal-related programs and man pages
ii  ncurses-term                  6.1+20181013-2+deb10u2      all          additional terminal type definitions

我只能找到一组包括:

$ ls /usr/include/ncurses
ncurses_dll.h  ncurses.h      ncursesw/

任何线索?谢谢

c linux linker shared-libraries ldflags
1个回答
0
投票

运行./configure --help,因为可能会有覆盖库版本的选项。

如果没有任何效果,请查看Makefile.in,该文件将通过configure处理为Makefile。寻找与ncurses相关的任何内容。我敢打赌,有一些像NCURSESLIB这样的变量,您可以在执行configure时在命令行上进行修改,就像使用CFLAGS(即./configure NCURSESLIB=-lncursesw.so.5)一样。

您也可以直接编辑最终的Makefile。如果在文件中搜索ncursesw,则应该在某处找到-lncursesw之类的内容。可能会有一些变量替换使它模糊(即-l$(NCURSES)NCURSESLIB=-lncursesw),但是它将存在于某处。您将需要对其进行更改,以便最终获得-lncursesw.so.5

[此外,当进行交叉编译时,通常应指定--build参数以及--host--build的值将设置为进行编译的工作站的体系结构。我认为这与您的问题无关。

© www.soinside.com 2019 - 2024. All rights reserved.