我正在尝试构建一个universal/fat可执行二进制文件,并且我正在使用ncurses进行链接。我使用的是自制的ncurses,因为内置的ncurses不支持宽字符。
问题似乎是-L/path/to/arm/libs -L/path/to/intel/libs
从不搜索intel库,因为它在/path/to/arm/libs
中找到了正确命名的库。然后它抱怨架构错误。它是错误的,但我希望clang继续在其他路径中寻找具有正确名称和架构的库。
这可能吗?我必须使用lipo或其他东西来从单独的arm和intel库构建一个fat库吗?
这是我的最小应用程序,它在终端窗口周围画了一个边框。
#define _XOPEN_SOURCE_EXTENDED
#include <ncursesw/curses.h>
#include <clocale>
int main(int argc, char* argv[]) {
setlocale(LC_ALL, "");
initscr();
raw();
noecho();
keypad(stdscr, true);
refresh();
wborder_set(stdscr, WACS_D_VLINE, WACS_D_VLINE, WACS_D_HLINE, WACS_D_HLINE,
WACS_D_ULCORNER, WACS_D_URCORNER, WACS_D_LLCORNER, WACS_D_LRCORNER);
getch();
endwin();
return 0;
}
下面是我的构建步骤,我实际上使用的是一个makefile,但如果我在链接时只指定一个arch和匹配的lib路径,这些行就可以构建非胖应用程序。
clang++ -std=c++17 -Wall -fno-objc-arc -finput-charset=UTF-8 -I/opt/homebrew/opt/ncurses/include -arch arm64 -arch x86_64 -c -o main.o main.cpp
clang++ -L/opt/homebrew/opt/ncurses/lib -L/usr/local/homebrew/opt/ncurses/lib -lncurses -arch arm64 -arch x86_64 -o test main.o
1条答案
按热度按时间lp0sw83n1#
下面是我所做的。我为
build/lib/libncurses.a
添加了一个新的make目标,并将其依赖项设置为homebrew安装的两个libncurses.a文件。它们是libncursesw.a的符号链接,但这仍然有效。我有点担心这两个libs./opt/homebrew/opt/ncurses/lib/libncurses.a: current ar archive random library
文件都没有指定架构,所以我很担心。对于规则,我使用lipo将两个文件连接到一个多拱库中。最后,这些是我的makefile的相关部分。
我正在研究一种很好的方法来支持其他ncurses的安装,比如从macports或者只是提取tarball并自己构建它,所以建议很受欢迎。我仍然希望有人能想出一个更好的答案。