永发信息网

移植libpng库怎么连接使用

答案:2  悬赏:10  手机版
解决时间 2021-03-06 08:02
  • 提问者网友:嘚啵嘚啵
  • 2021-03-05 23:25
移植libpng库怎么连接使用
最佳答案
  • 五星知识达人网友:北方的南先生
  • 2021-03-06 01:01
1.到libpng的官网上download自己相应的平台libpng的库.然后解压。
  2.查看makefile文件的内容。创建一个文件夹 查看makefile文件里面编译成库必须包含的文件copy到该文件里面在这里我文件名取名为png。
  以下是libpng1510的makefile文件中比较全的说了包含所有编译libpng库需要的文件的语句。
  OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
  pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
  pngwtran.o pngmem.o pngerror.o pngpread.o
  (.o文件是编译生成链接库必要的中间文件)
  3.1(这里有多种方法。3.1代表3步的第1种方法。)单独编译成so文件或.a文件(动态或静态链接库文件)然后移植到项目。该方法具体写法可以参考ndk里面docs文件夹下的ANDROID-MK.html的文档。
  3.1.1(3.1代表3步的第1种方法的第一步。):你可以建立一个jni文件夹然后把刚才的png文件夹扔到jni文件夹里面然后再创建一个.mk文件。内容如下
  静态
  LOCAL_PATH :=$(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE :=png
  LOCAL_SRC_FILES := png/png.c png/pngset.c png/pngget.c png/pngrutil.c png/pngtrans.c png/pngwutil.c \
  png/pngread.c png/pngrio.c png/pngwio.c png/pngwrite.c png/pngrtran.c \
  png/pngwtran.c png/pngmem.c png/pngerror.c png/pngpread.c
  include $(BUILD_STATIC_LIBRARY)
  动态
  LOCAL_PATH :=$(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE :=png
  LOCAL_SRC_FILES := png/png.c png/pngset.c png/pngget.c png/pngrutil.c png/pngtrans.c png/pngwutil.c \
  png/pngread.c png/pngrio.c png/pngwio.c png/pngwrite.c png/pngrtran.c \
  png/pngwtran.c png/pngmem.c png/pngerror.c png/pngpread.c
  include $(BUILD_SHARED_LIBRARY)
  (当然你可以直接去掉把里面的文件放在jni下面就不需要夹png/了)
  3.1.2:如果你解压好了ndk那么把ndk的目录加入环境变量之后那么你就可以CD进入jni所在的上一层目录。进行ndk-build了。这时候在你的新生成的libs和obj文件夹里面就可以得到你想要的链接库了。(如果你是用的是静态的那么libs文件夹里面是不会有的。因为libs文件夹里面的东西将来会直接打包到apk的。而静态链接库不会自动打包到里面只能以动态库打包进去。)
  3.1.3:好了得到了链接库之后你就可以到你的ndk项目里面使用了!这时候你需要把你的动态链接库直接复制到你的项目的jni文件夹下面。然后在里面编写以下这样的类似的mk文件:
  LOCAL_PATH :=$(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE := png
  LOCAL_SRC_FILES := libpng.so
  #include $(BUILD_STATIC_LIBRARY) #如果是使用静态的库把这句include前的#去掉
  #include $(BUILD_SHARED_LIBRARY) #如果是使用动态的库把这句include前的#去掉

  include $(CLEAR_VARS)
  LOCAL_MODULE := ourproject
  LOCAL_SRC_FILES := ourproject.c
  #LOCAL_STATIC_LIBRARIES := libpng #如果是使用静态的库把这句include前的#去掉
  #LOCAL_SHARED_LIBRARIES := libpng #如果是使用动态的库把这句include前的#去掉
  include $(BUILD_SHARED_LIBRARY)

  编写好之后你就可以CD到你项目路径然后ndk-build了。在你的 ourproject.c
  文件里面试着写一下png库的调用。
全部回答
  • 1楼网友:神鬼未生
  • 2021-03-06 01:13
你在交叉编译时是如何配置的? ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps cxx=arm-none-linux-gnueabi-g++ cppflags=-i/usr/arm-2008q3/arm-none-linux-gnueabi/include --prefix=/usr/opencv 其中:--without-gtk 不使用gtk库,加上了吗?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯