gpt4 book ai didi

C++ gmp 和 Homebrew 软件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:09 26 4
gpt4 key购买 nike

我在 mac 上,我已经通过 homebrew 安装了 gccgmp

为了测试我的安装,我尝试了来自 here 的简单示例:

#include <iostream>
#include <gmpxx.h>
using namespace std;
int
main (void)
{
mpz_class a, b, c;

a = 1234;
b = "-5678";
c = a+b;
cout << "sum is " << c << "\n";
cout << "absolute value is " << abs(c) << "\n";

return 0;
}

首先,如果我尝试 g++ test.cpp -lgmpxx -lgmp 它会提示

test.cpp:9:19: fatal error: gmpxx.h: No such file or directory
#include <gmpxx.h>
^
compilation terminated.

所以我尝试了 g++ test.cpp -lgmpxx -lgmp -I/usr/local/include/

ld: library not found for -lgmpxx
collect2: error: ld returned 1 exit status

然后我尝试了 g++ test.cpp -lgmpxx -lgmp -I/usr/local/include/-L/usr/local/lib/

Undefined symbols for architecture x86_64:
"operator<<(std::basic_ostream<char, std::char_traits<char> >&, __mpz_struct const*)", referenced from:
std::basic_ostream<char, std::char_traits<char> >& operator<< <__mpz_struct [1], __mpz_struct [1]>(std::basic_ostream<char, std::char_traits<char> >&, __gmp_expr<__mpz_struct [1], __mpz_struct [1]> const&) in ccPugkZ3.o
std::basic_ostream<char, std::char_traits<char> >& operator<< <__mpz_struct [1], __gmp_unary_expr<__gmp_expr<__mpz_struct [1], __mpz_struct [1]>, __gmp_abs_function> >(std::basic_ostream<char, std::char_traits<char> >&, __gmp_expr<__mpz_struct [1], __gmp_unary_expr<__gmp_expr<__mpz_struct [1], __mpz_struct [1]>, __gmp_abs_function> > const&) in ccPugkZ3.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

有趣的是,如果我用 cout 注释掉这些行并尝试 g++ test.cpp -lgmpxx -lgmp -I/usr/local/include/-L/usr/local/lib/&& ./a.out 没有投诉。特别是 c = a+b; 行不需要注释掉,所以我觉得好像发生了什么。

我错过了什么?如何获取示例代码进行编译?

编辑:

根据@Will 的建议,我尝试了 g++ test.cpp -lgmpxx -lgmp -I/usr/local/include/-L/usr/local/lib/-m32

ld: warning: ld: warning: ignoring file /usr/local/lib//libgmpxx.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/lib//libgmpxx.dylibignoring file /usr/local/lib//libgmp.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/lib//libgmp.dylib

Undefined symbols for architecture i386:
"operator<<(std::basic_ostream<char, std::char_traits<char> >&, __mpz_struct const*)", referenced from:
std::basic_ostream<char, std::char_traits<char> >& operator<< <__mpz_struct [1], __mpz_struct [1]>(std::basic_ostream<char, std::char_traits<char> >&, __gmp_expr<__mpz_struct [1], __mpz_struct [1]> const&) in ccrPv2wC.o
std::basic_ostream<char, std::char_traits<char> >& operator<< <__mpz_struct [1], __gmp_unary_expr<__gmp_expr<__mpz_struct [1], __mpz_struct [1]>, __gmp_abs_function> >(std::basic_ostream<char, std::char_traits<char> >&, __gmp_expr<__mpz_struct [1], __gmp_unary_expr<__gmp_expr<__mpz_struct [1], __mpz_struct [1]>, __gmp_abs_function> > const&) in ccrPv2wC.o
"___gmpz_abs", referenced from:
__gmp_abs_function::eval(__mpz_struct*, __mpz_struct const*) in ccrPv2wC.o
"___gmpz_add", referenced from:
__gmp_binary_plus::eval(__mpz_struct*, __mpz_struct const*, __mpz_struct const*) in ccrPv2wC.o
"___gmpz_clear", referenced from:
__gmp_expr<__mpz_struct [1], __mpz_struct [1]>::~__gmp_expr() in ccrPv2wC.o
"___gmpz_init", referenced from:
__gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr() in ccrPv2wC.o
__gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr<__gmp_unary_expr<__gmp_expr<__mpz_struct [1], __mpz_struct [1]>, __gmp_abs_function> >(__gmp_expr<__mpz_struct [1], __gmp_unary_expr<__gmp_expr<__mpz_struct [1], __mpz_struct [1]>, __gmp_abs_function> > const&) in ccrPv2wC.o
"___gmpz_set_si", referenced from:
__gmp_expr<__mpz_struct [1], __mpz_struct [1]>::assign_si(long) in ccrPv2wC.o
"___gmpz_set_str", referenced from:
__gmp_expr<__mpz_struct [1], __mpz_struct [1]>::operator=(char const*) in ccrPv2wC.o
ld: symbol(s) not found for architecture i386
collect2: error: ld returned 1 exit status

如果我对错误信息的理解正确,这些库似乎确实是为 64 位构建的,甚至声明 mpz_class a, b, c 也无法通过 编译-m32.

最佳答案

根据这个答案,尝试运行 xcode-select --install

On mac, g++ (clang) fails to search /usr/local/include and /usr/local/lib by default

关于C++ gmp 和 Homebrew 软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24641199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com