ubuntu如何利用ndk-build生成.so文件?在终端输入显示没有那个文件或目录怎么办!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu如何利用ndk-build生成.so文件?在终端输入显示没有那个文件或目录怎么办!!!相关的知识,希望对你有一定的参考价值。

NDK什么的都配置好了。我看本身自带的例子hello-jni里有一个.mk文件,一个.c文件。在终端输入ndk-build显示没有那个文件或目录,怎么办??
请问如果我自己又现成的.c文件需要编译成.so文件,那么在.mk文件中把它写进去就行么?

新手,麻烦说的详细一点,谢谢!

ndk-build 找的是jni目录,把你build的文件放到jni目录里面,ndk-build jni/追问

现在NDK自带的sample可以编译成功。
我自己有现成的C文件,想编译成.so文件,android.mk文件编写了,头文件也生成了。现在ndk-build就报错stdint.h文件中的conflicting types for'int8_t',请问怎么解决呢??

追答

你用的ndk版本是多少?是不是你用的ndk版本低了

追问

r9d.
别人倒是帮我编译了一个.so文件,那么如果想打包成APK又怎么做呢??

追答

1.直接用eclipse建个android项目,写个jni接口调用你的动态库(这个要是不会写自己度娘下),然后把你编译的so放到libs/armeabi(或者armeabi-v7a,这个看你编译so使用的native code),使用eclipse自动打包
2.使用ant debug命令打包成apk(ant命令使用要是不会也度娘下吧)

参考技术A 请问解决了吗,我也遇到了同样的问题

如何交叉编译 qt4 for arm 以生成 bin/lrelease 和 lib/libQtDesigner.so

【中文标题】如何交叉编译 qt4 for arm 以生成 bin/lrelease 和 lib/libQtDesigner.so【英文标题】:how to cross-compile qt4 for arm to generate bin/lrelease and lib/libQtDesigner.so 【发布时间】:2015-04-03 05:37:05 【问题描述】:

我在我的 x86 ubuntu 14.04 目标上将 qt4.7.4 交叉编译到 aarch64 linux 板,我成功了。

但是,有一个问题:我找不到bin/lreleaselib/libQtDesigner.so 等等。

如何配置它以便构建它们?

我的配置是这样的:

export ROOTFS=/aarch64_2
export CROSS_COMPILE=aarch64-unknown-linux-gnueabi
export PKG_CONFIG_PATH=$ROOTFS/usr/local/lib/aarch64-linux-gnu/pkgconfig:$ROOTFS/usr/lib/aarch64-linux-gnu/pkgconfig:$ROOTFS/usr/lib/pkgconfig:$ROOTFS/usr/share/pkgconfig:$ROOTFS/usr/local/lib/pkgconfig:$ROOTFS/usr/local/share/pkgconfig

./configure -release -v  -fast -opensource 
-developer-build -confirm-license 
-nomake examples -nomake demos 
-nomake docs -nomake translations 
-no-openssl  -webkit -no-qt3support 
-no-rpath -phonon -no-opengl 
-dbus -arch aarch64 -xplatform linux-g++-aarch64   -force-pkg-config

和 mkspecs/linux-g++-aarch64/qmake.conf 是:

MAKEFILE_GENERATOR  = UNIX
TARGET_PLATFORM     = unix
TEMPLATE        = app
CONFIG          += qt warn_on release incremental link_prl         gdb_dwarf_index
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib


include(../common/g++.conf)
include(../common/linux.conf)


QMAKE_CC = $$(CROSS_COMPILE)-gcc
QMAKE_CXX = aarch64-unknown-linux-gnueabi-g++
QMAKE_LINK = aarch64-unknown-linux-gnueabi-g++
QMAKE_LINK_SHLIB = aarch64-unknown-linux-gnueabi-g++
QMAKE_AR = $$(CROSS_COMPILE)-ar cr
QMAKE_OBJCOPY = $$(CROSS_COMPILE)-objcopy
QMAKE_STRIP = $$(CROSS_COMPILE)-strip

QMAKE_LFLAGS_RELEASE = -Wl,-O2 
QMAKE_INCDIR += $$(ROOTFS)/usr/include
QMAKE_INCDIR += $$(ROOTFS)/usr/include/aarch64-linux-gnu

QMAKE_LIBDIR += $$(ROOTFS)/usr/lib
QMAKE_LIBDIR += $$(ROOTFS)/usr/lib/aarch64-linux-gnu
QMAKE_LIBDIR += $$(ROOTFS)/lib
QMAKE_LIBDIR += $$(ROOTFS)/lib/aarch64-linux-gnu


QMAKE_INCDIR_X11 = $$(ROOTFS)/usr/include
QMAKE_LIBDIR_X11 = $$(ROOTFS)/usr/lib

QMAKE_INCDIR_OPENGL = $$(ROOTFS)/usr/include
QMAKE_LIBDIR_OPENGL = $$(ROOTFS)/usr/lib

#QMAKE_CFLAGS       = -fpermissive
QMAKE_LFLAGS        = -Wl,-rpath-link $$(ROOTFS)/usr/lib -Wl,-rpath-link     $$(ROOTFS)/usr/lib/aarch64-linux-gnu  -Wl,-rpath-link $$(ROOTFS)/lib -Wl,-rpath-link $$(ROOTFS)/lib/aarch64-linux-gnu

【问题讨论】:

【参考方案1】:

终于,我知道为什么了。 configure shell 有一个注释:交叉编译时默认不构建工具。所以如果我们是交叉编译,我们想编译工具,只需在命令行中添加-make工具即可。

【讨论】:

以上是关于ubuntu如何利用ndk-build生成.so文件?在终端输入显示没有那个文件或目录怎么办!!!的主要内容,如果未能解决你的问题,请参考以下文章

Android 生成so库 然后给别人调用

Android 生成so库 然后给别人调用

Android 生成so库 然后给别人调用

Android 生成so库 然后给别人调用

ndk编译生成so

AS中ndk-build方式cpp问题集锦