相关疑难解决方法(0)

如何测试CMake是否找到了一个包含find_library的库

我找到了具有该find_library功能的库

find_library(MY_LIB lib PATHS ${MY_PAHT})
Run Code Online (Sandbox Code Playgroud)

如果找到库,${MY_LIB}将指向正确的位置.如果未找到库,${MY_LIB}则会MY_LIB-NOTFOUND.

但是我该如何测试呢?

if(${MY_LIB} EQUAL 'MY_LIB-NOTFOUND') 
    ...
endif()
Run Code Online (Sandbox Code Playgroud)

总是评估为假.

cmake

24
推荐指数
2
解决办法
2万
查看次数

Android位图本机代码 - 链接问题

编译我的应用程序时遇到问题,这是受位图等离子的启发.我在打电话

    if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) {
    LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret);
    return;
}

if (info.format != ANDROID_BITMAP_FORMAT_RGB_565) {
    LOGE("Bitmap format is not RGB_565 !");
    return;
}

if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
    LOGE("AndroidBitmap_lockPixels() failed ! error=%d", ret);
}

       /*****code here***********/
AndroidBitmap_unlockPixels(env, bitmap);
Run Code Online (Sandbox Code Playgroud)

我在源文件中包含了android/bitmap.h.我在ubuntu 10.10上使用android-ndk-r5b和sdk-9.

我收到了一个错误

 /home/user5432/workspace/bitmapproj/obj/local/armeabi/objs-debug/mybitmap.o : In function Java_com_example_plasma_PlasmaView_renderPlasma
"undefined reference to AndroidBitmap_getInfo"
"undefined reference to AndroidBitmap_lockPixels"
"undefined reference to AndroidBitmap_unlockPixels"
Run Code Online (Sandbox Code Playgroud)

问题出在调试代码上.但是问题是什么?任何人都有答案吗?

android bitmap android-ndk

22
推荐指数
3
解决办法
1万
查看次数

无法使用Android Studio从JNI打印日志消息

我得到的错误:

错误:对'__android_log_print'的未定义引用

我已将此行添加到我的.cpp文件中:

#include <android/log.h>
Run Code Online (Sandbox Code Playgroud)

我尝试过两种方法:__ android_log_print__android_log_write

我还在我的Android.mk文件(我手动编译)中链接了日志库.

LOCAL_LDLIBS:= --llog

我也尝试了几种我认为的替代品:

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
Run Code Online (Sandbox Code Playgroud)

这是我的Android.mk:

LOCAL_PATH := $(call my-dir)

#used to skip re-compiling libraw
#include $(CLEAR_VARS)
#LOCAL_MODULE    := libraw_r
#LOCAL_SRC_FILES := ../obj/local/armeabi/libraw_r.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libraw
#include $(PREBUILT_SHARED_LIBRARY)

#used for compiling libraw
include $(CLEAR_VARS)
LOCAL_CFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
LOCAL_CXXFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
LOCAL_MODULE     := libraw_r                    # name of your module
LOCAL_LDLIBS     += -L$(SYSROOT)/usr/lib -lstdc++ # libraries to link against, lstdc++ is auto-linked

LOCAL_SRC_FILES  :=  internal/dcraw_common.cpp …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android-ndk android-studio android-gradle-plugin

8
推荐指数
1
解决办法
9332
查看次数

如何在 Flutter 中使用 dart:ffi 打印到控制台?

从我正在运行的以下 C++ 代码运行我的 Flutter 应用程序(在 Android 上)时尝试打印到控制台dart:ffi

#include <iostream>

std::cout << "Hello, World!";
Run Code Online (Sandbox Code Playgroud)

在终端中没有给我任何输出。我如何从 C++ 打印到 Flutter 终端?


我知道我的函数可以正常工作,因为我在指针/返回值上得到了正确的操作。

c++ android dart flutter dart-ffi

4
推荐指数
1
解决办法
791
查看次数

如何以正确的方式构建CMakeLists?

我有以下问题:我有两组不同的文件(主文件和另一组文件),我希望将它们分开。因此,我有一组文件(主文件),我以这种方式配置:

set(libplayersource
        ....
        )

add_library( # Sets the name of the library.
        libplayer

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ${libplayersource})
Run Code Online (Sandbox Code Playgroud)

然后,我有了第二组文件(其他文件),我以这种方式配置:

set(codec_source
        ...)

add_library(libcodec SHARED ${codec_source})
Run Code Online (Sandbox Code Playgroud)

最终,我需要链接这两套文件:

target_link_libraries( # Specifies the target library.
        libplayer
        libcodec)
Run Code Online (Sandbox Code Playgroud)

在完成此配置之后,我还需要包含loglib才能使其正常运行。首先,我需要找到该log库,然后将其包含在本机库中。

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)
Run Code Online (Sandbox Code Playgroud)

另外,我应该进行编辑target_link_libraries …

c++ linker cmake android-ndk

1
推荐指数
1
解决办法
61
查看次数