使用Makefile创建DLL以在Windows XP(32位)和Windows 7(64位)上运行

使用Makefile创建DLL以在Windows XP(32位)和Windows 7(64位)上运行,第1张

概述我需要修改下面的makefile来创建一个将在32位 Windows和64位 Windows环境中运行的dll(SampleNew.dll).也许创建两个dll(一个用于64,一个用于32)是最好的方法.它需要使用SampleApi.dll(在下面的LIBS声明中).以下内容不会为Windows创建有效的32位dll.有关如何修改以下内容以使其工作的任何想法? CMODE=SWIG = swi 我需要修改下面的makefile来创建一个将在32位 Windows和64位 Windows环境中运行的dll(SampleNew.dll).也许创建两个dll(一个用于64,一个用于32)是最好的方法.它需要使用SampleAPI.dll(在下面的liBS声明中).以下内容不会为windows创建有效的32位dll.有关如何修改以下内容以使其工作的任何想法?

CMODE=SWIG = swigCC = $(PREFIX)gccLD = $(CC) OBJ_DIR = objautoGEN_DIR = ../src/javaPACKAGE_DIR = $(autoGEN_DIR)/com/test/samplePACKAGE = com.test.sampleINCLUDES = -I$(JAVA_INCLUDE) \           -I$(SAMPLE_DIR)/include \           -I$(JDK_HOME)/includeliB_INCLUDES = -L$(SAMPLE_DIR)/libliBS = /lib/libssl.so.4 \       /lib/libcrypto.so.4 \       -lSampleAPI \       -lmDirs = $(PACKAGE_DIR) $(disT_DIR) $(OBJ_DIR) $(autoGEN_DIR)CFLAGS = $(CMODE) -Wall -fpic $(INCLUDES) -O0 -g3SFLAGS = -java $(INCLUDES) -package $(PACKAGE) -outdir $(PACKAGE_DIR)LDFLAGS = -shared $(liB_INCLUDES) $(liBS)OBJECTS = $(OBJ_DIR)/test_wrap.oTARGET = $(liB_DIR)/SampleNew.dllall: $(Dirs) $(TARGET)%_wrap.c: %.i    $(SWIG) $(SFLAGS) $< $(OBJ_DIR)/%.o: %.c    $(CC) $(CFLAGS) -c $< -o $@$(TARGET): $(OBJECTS)    $(LD) $(OBJECTS) $(LDFLAGS) -o $@$(Dirs):    mkdir -p $@clean:    rm -rf $(TARGET) $(PACKAGE_DIR)/* $(TARGET) $(autoGEN_DIR) $(OBJ_DIR)

例外:

java.lang.UnsatisfIEdlinkError c:\test\myDllfile.dll: can't load this .dll (machine code=0x101) on a IA 32-bit platform

更新Makefile:

CMODE=SWIG = swigPREFIX=/test/mingw/mingw32/bin/i386-mingw32-CC = $(PREFIX)gccLD = $(CC) OBJ_DIR = objautoGEN_DIR = ../src/javaPACKAGE_DIR = $(autoGEN_DIR)/com/test/jniPACKAGE = com.test.jniINCLUDES = -I$(header_fileS_DIR) # env var that points to a dir with all the .h filesliB_INCLUDES = -L$(C_API_DIR)/lib # env var that points to a dir with the C librarIEs (dlls)liBS = -lMainAPI \ # MainAPI.dll       -lmDirs = $(PACKAGE_DIR) $(disT_DIR) $(OBJ_DIR) $(autoGEN_DIR) # disT_DIR is passed in CFLAGS = $(CMODE) -Wall -fpic $(INCLUDES) -O0 -g3SFLAGS = -java $(INCLUDES) -package $(PACKAGE) -outdir $(PACKAGE_DIR)LDFLAGS = -shared $(liB_INCLUDES) $(liBS) -leay32 -lws2_32 -lrpcrt4OBJECTS = $(OBJ_DIR)/test_wrap.oTARGET = $(liB_DIR)/SampleJni.dllall: $(Dirs) $(TARGET)%_wrap.c: %.i    $(SWIG) $(SFLAGS) $< $(OBJ_DIR)/%.o: %.c    $(CC) $(CFLAGS) -c $< -o $@$(TARGET): $(OBJECTS)    $(LD) $(OBJECTS) $(LDFLAGS) -o $@$(Dirs):    mkdir -p $@clean:    rm -rf $(TARGET) $(PACKAGE_DIR)/* $(TARGET) $(autoGEN_DIR) $(OBJ_DIR)
解决方法 你能做的最简单的事情就是分开建造两者.例如,定义:

CFLAGS = $(CMODE) -Wall -fpic $(INCLUDES) -O0 -g3 -march=$(ARCH)OBJ_DIR = obj-$(ARCH)liB_DIR = lib-$(ARCH).PHONY: defaultdefault:        $(MAKE) ARCH=i686 all        $(MAKE) ARCH=x86_64 all

避免-m32,因为它为x86-64生成32位代码,可能使用x86中不可用的指令.

总结

以上是内存溢出为你收集整理的使用Makefile创建DLL以在Windows XP(32位)和Windows 7(64位)上运行全部内容,希望文章能够帮你解决使用Makefile创建DLL以在Windows XP(32位)和Windows 7(64位)上运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/langs/1229798.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存