【发布时间】:2021-09-07 01:49:30
【问题描述】:
该库在 linux (Ubuntu 20.04.2 LTS 64) 中完美编译,但在尝试为 android 编译时失败。 使用的程序:
$ git https://github.com/ufz/iphreeqc
$ cd iphreeqc
$ mkdir output
$ export ANDROID_NDK=$ANDROID_SDK_ROOT/ndk/22.1.7171670
$ PATH=$PATH:$ANDROID_NDK
$ export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64
$ export TARGET=armv7a-linux-androideabi
$ export API=21
$ export AR=$TOOLCHAIN/bin/llvm-ar
$ export CC=$TOOLCHAIN/bin/$TARGET$API-clang
$ export AS=$CC
$ export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
$ export LD=$TOOLCHAIN/bin/ld
$ export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
$ export STRIP=$TOOLCHAIN/bin/llvm-strip
$ ./configure --prefix=$(pwd)/output --host $TARGET --disable-shared
$ make
此后的输出和错误。 非常感谢任何帮助。
全部在 src make[1]: 进入目录'/home/hery/Downloads/iphreeqc/src' CXX CSelectedOutput.lo CXX IPhreeqc.lo CXX IPhreeqc_interface_F.lo CXX IPhreeqcLib.lo CXX phreeqcpp/advection.lo CXX phreeqcpp/basicsubs.lo CXX phreeqcpp/cl1.lo CXX phreeqcpp/common/Parser.lo CXX phreeqcpp/common/PHRQ_base.lo CXX phreeqcpp/common/PHRQ_io.lo CXX phreeqcpp/common/Utils.lo CXX phreeqcpp/cvdense.lo phreeqcpp/cvdense.cpp:76:9: 警告:'malloc' 宏重新定义 [-Wmacro-redefined] #define malloc PHRQ_malloc ^ :31:9: 注意:之前的定义在这里 #define malloc rpl_malloc ^ 生成 1 个警告。 CXX phreeqcpp/cvode.lo phreeqcpp/cvode.cpp:76:9: 警告:'malloc' 宏重新定义 [-Wmacro-redefined] #define malloc MACHENV_MALLOC PHRQ_malloc ^ :31:9: 注意:之前的定义在这里 #define malloc rpl_malloc ^ 生成 1 个警告。 CXX phreeqcpp/cxxKinetics.lo CXX phreeqcpp/cxxMix.lo CXX phreeqcpp/dense.lo CXX phreeqcpp/Dictionary.lo CXX phreeqcpp/dumper.lo CXX phreeqcpp/Exchange.lo CXX phreeqcpp/ExchComp.lo CXX phreeqcpp/GasComp.lo CXX phreeqcpp/gases.lo CXX phreeqcpp/GasPhase.lo CXX phreeqcpp/input.lo CXX phreeqcpp/integrate.lo CXX phreeqcpp/inverse.lo phreeqcpp/inverse.cpp:5319:9:警告:常数 -1 与 'char' 类型表达式的比较结果始终为真 [-Wtautological-常量超出范围比较] if (c != EOF && c != '\n' && i != MAX_LINE) ~ ^ ~~~ phreeqcpp/inverse.cpp:5343:9:警告:常数 -1 与 'char' 类型表达式的比较结果始终为假 [-Wtautological-常量超出范围比较] 如果(c == EOF) ~ ^ ~~~ 生成 2 个警告。 CXX phreeqcpp/ISolution.lo CXX phreeqcpp/ISolutionComp.lo CXX phreeqcpp/isotopes.lo CXX phreeqcpp/动力学.lo CXX phreeqcpp/KineticsComp.lo CXX phreeqcpp/mainsubs.lo CXX phreeqcpp/model.lo phreeqcpp/model.cpp:3364:8:错误:命名空间“std”中没有名为“isfinite”的成员;你的意思是“有限”吗? if (!PHR_ISFINITE((double) delta[i])) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/phreeqcpp/Phreeqc.h:2041:29:注意:从宏“PHR_ISFINITE”扩展而来 # 定义 PHR_ISFINITE(x) std::isfinite(x) ^~~~~ /home/hery/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/math.h:373:5: 注意:这里声明了'finite' int 有限(双 __x)__attribute_const__; ^ phreeqcpp/model.cpp:3559:8:错误:命名空间“std”中没有名为“isfinite”的成员;你的意思是“有限”吗? if (!PHR_ISFINITE((double) delta[i])) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/phreeqcpp/Phreeqc.h:2041:29:注意:从宏“PHR_ISFINITE”扩展而来 # 定义 PHR_ISFINITE(x) std::isfinite(x) ^~~~~ /home/hery/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/math.h:373:5: 注意:这里声明了'finite' int 有限(双 __x)__attribute_const__; ^ phreeqcpp/model.cpp:4990:10:错误:命名空间“std”中没有名为“isfinite”的成员;你的意思是“有限”吗? 如果(!PHR_ISFINITE((双)f)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/phreeqcpp/Phreeqc.h:2041:29:注意:从宏“PHR_ISFINITE”扩展而来 # 定义 PHR_ISFINITE(x) std::isfinite(x) ^~~~~ /home/hery/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/math.h:373:5: 注意:这里声明了'finite' int 有限(双 __x)__attribute_const__; ^ phreeqcpp/model.cpp:5050:12:错误:命名空间“std”中没有名为“isfinite”的成员;你的意思是“有限”吗? if (PHR_ISFINITE((double) d1) /*&& d1 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/phreeqcpp/Phreeqc.h:2041:29:注意:从宏“PHR_ISFINITE”扩展而来 # 定义 PHR_ISFINITE(x) std::isfinite(x) ^~~~~ /home/hery/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/math.h:373:5: 注意:这里声明了'finite' int 有限(双 __x)__attribute_const__; ^ phreeqcpp/model.cpp:5733:10:错误:命名空间“std”中没有名为“isfinite”的成员;你的意思是“有限”吗? if (!PHR_ISFINITE(my_array[j * (count_unknowns + 1) + i])) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ ../src/phreeqcpp/Phreeqc.h:2041:29:注意:从宏“PHR_ISFINITE”扩展而来 # 定义 PHR_ISFINITE(x) std::isfinite(x) ^~~~~ /home/hery/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/math.h:373:5: 注意:这里声明了'finite' int 有限(双 __x)__attribute_const__; ^ 产生 5 个错误。 make[1]: *** [Makefile:1056: phreeqcpp/model.lo] 错误 1 make[1]: 离开目录 '/home/hery/Downloads/iphreeqc/src' make: *** [Makefile:400: all-recursive] 错误 1【问题讨论】:
-
您是否包含
<cmath>?请提供一个最小示例和您的代码。 -
std::isfinite是在 C++11 中添加的。你是用-std=c++11或更高版本编译这个库吗? -
这是一个在世界范围内广泛使用的 c++ 库。它在 linux 平台上编译没有问题。所有代码都是公开的。
-
@Botje。我不知道:-(。我所做的只是在我的问题中!
标签: android c++ android-ndk