win10 64vs怎么编译 libpng

win10 64vs怎么编译 libpng,第1张

1. 先下载 libpng(http://sourceforge.net/projects/libpng/files/)和libz(http://zlib.net/zlib-1.2.7.tar.gz),将libpng解压,如C:\workspace\libpng\。

2. 将libz解压,改名zlib放到libpng同级目录,如C:\workspace\zlib。

3. 进入libpng\projects\visualc71\,用visual studio打开工程文件,方案中会有三个子工程:libpng, pngtest, zlib。直接编译,不出意外会在Win32_DLL_Debug目录下和Win32_DLL_Debug\ZLib目录下生成zlib1d.dll, libpng15d.dll, libpng.lib和zlib.lib等库文件。

4.若报错,拷贝scripts/pnglibconf.h.prebuilt到源码目录,改名为pnglibconf.h

对于要用到这两个库的工程,主要需要做三件事:

1. C/C++常规->附加包含目录中把包含png.h等头文件的目录加进来

2. 链接器->输入->附加依赖项中加zlib.liblibpng.lib。

3.通用属性->VC++ 目录->库目录中把放着zlib.lib和libpng.lib的目录加进来。

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库的调用。

在/usr/local/lib里

ubuntu的libpng 库正常安装方法:apt-get install libpng 但我估计你的问题不是没有安装libpng库,而是你没有指定libpng库的位置。最根本的解决办法是在你的一键编译脚本中添加libpng库(-qt-libpng).


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11427903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存