- 此问题在此处已有答案**:
(39个答案)
21小时前关门了。
我已经下载了一个外部C++库,通过FFI在Flutter程序中使用。我已经正确设置了FFI,但是每当我从外部库使用函数时,我都会收到一个错误。函数如下:
#include <iostream>
#include "aoo/include/aoo/aoo.h"
#include "aoo/include/aoo/aoo_server.h"
#include "aoo/include/aoo/aoo_net.h"
extern "C" void initAoo(){
aoo_initialize(0);
std::cout << "Called from init AOO!" << std::endl;
}
当我编译并运行到Android设备时,我得到这个错误:
* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
Error while executing process /Users/zacharyhaslam/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja with arguments {-C /Users/zacharyhaslam/FlutterApplications/state_management_example/android/app/.cxx/cmake/debug/armeabi-v7a add}
ninja: Entering directory `/Users/zacharyhaslam/FlutterApplications/state_management_example/android/app/.cxx/cmake/debug/armeabi-v7a'
[1/2] Building CXX object CMakeFiles/add.dir/cpp/add.cpp.o
[2/2] Linking CXX shared library /Users/zacharyhaslam/FlutterApplications/state_management_example/build/app/intermediates/cmake/debug/obj/armeabi-v7a/libadd.so
FAILED: /Users/zacharyhaslam/FlutterApplications/state_management_example/build/app/intermediates/cmake/debug/obj/armeabi-v7a/libadd.so
: && /Users/zacharyhaslam/Library/Android/sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi19 --sysroot=/Users/zacharyhaslam/Library/Android/sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -fno-limit-debug-info -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--gc-sections -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libadd.so -o /Users/zacharyhaslam/FlutterApplications/state_management_example/build/app/intermediates/cmake/debug/obj/armeabi-v7a/libadd.so CMakeFiles/add.dir/cpp/add.cpp.o -latomic -lm && :
ld: error: undefined symbol: aoo_initialize
>>> referenced by add.cpp:11 (../../../../../cpp/add.cpp:11)
>>> CMakeFiles/add.dir/cpp/add.cpp.o:(initAoo)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed
根据我的研究,我认为问题一定是来自我设置编译设置的方式,所以下面是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.10.2)
add_library( add
SHARED
cpp/add.cpp
)
include_directories(cpp/aoo/include/aoo/aoo.h)
add_library(aoo cpp/aoo/include/aoo/aoo.h)
set_target_properties(aoo PROPERTIES LINKER_LANGUAGE CXX)
CMakeLists.txt有什么问题?我是否正确地包含了用于编译的文件?
1条答案
按热度按时间mwg9r5ms1#
最基本的问题是aoo不是内置的,你需要注意这一点。
我假设您的程序是目标“add”,上面的源代码位于cpp/add.cpp中
基本上需要正确地设置aoo库,然后告诉CMake链接你的程序。
你将需要找出如何aoo需要建立虽然。
然而,如果你设置的很好,你可以
#include <aoo/aoo.h>
,因为CMake也会告诉编译器在哪里可以找到include。如果aoo提供了CMake集成,也可以直接使用它。