【问题标题】:How to compile FreeImage on Mac OS X 10.8?如何在 Mac OS X 10.8 上编译 FreeImage?
【发布时间】:2013-09-29 16:19:01
【问题描述】:

当尝试在 Mac OS X 10.8 上使用 make make 构建 FreeImage 3.1.5.4 时,出现以下错误 g++-4.0: No such file or directory。关于编译器配置的 makefile 有问题。如何解决这个问题?

【问题讨论】:

    标签: macos gcc clang freeimage


    【解决方案1】:

    FreeImage 3.1.5.4 的makefile.osx 对于 OS X 版本 > 10.6 已过时。请参阅这篇文章的底部以获取修改后的版本。除了解决FreeImage issue tracker 中描述的问题之外,您还需要在Source/OpenEXR/IlmImf/ImfAutoArray.h 中添加一行:

    #include <cstring>
    

    适用于 OS X 10.8 的 Makefile:

    # -*- Makefile -*-
    # Mac OSX makefile for FreeImage
    
    # This file can be generated by ./gensrclist.sh
    include Makefile.srcs
    
    # General configuration variables:
    CC_X86_64 = gcc -4.2
    CPP_X86_64 = g++ -4.2
    COMPILERFLAGS = -Os -fexceptions -fvisibility=hidden -DNO_LCMS
    COMPILERFLAGS_X86_64 = -arch x86_64
    COMPILERPPFLAGS = -Wno-ctor-dtor-privacy
    INCLUDE += 
    INCLUDE_X86_64 = -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk
    CFLAGS_X86_64 = $(COMPILERFLAGS) $(COMPILERFLAGS_X86_64) $(INCLUDE) $(INCLUDE_X86_64)
    CPPFLAGS_X86_64 = $(COMPILERPPFLAGS) $(CFLAGS_X86_64)
    LIBRARIES_X86_64 = -Wl,-syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk
    LIBTOOL = libtool
    LIPO = lipo
    
    TARGET = freeimage
    STATICLIB = lib$(TARGET).a
    SHAREDLIB = lib$(TARGET)-$(VER_MAJOR).$(VER_MINOR).dylib
    LIBNAME = lib$(TARGET).$(VER_MAJOR).dylib
    HEADER = Source/FreeImage.h
    
    .SUFFIXES: .o-x86_64
    MODULES_X86_64 = $(SRCS:.c=.o-x86_64)
    MODULES_X86_64 := $(MODULES_X86_64:.cpp=.o-x86_64)
    
    PREFIX = /usr/local
    INSTALLDIR = $(PREFIX)/lib
    INCDIR = $(PREFIX)/include
    
    default: all
    
    all: dist
    
    dist: FreeImage
        cp *.a Dist
        cp *.dylib Dist
        cp Source/FreeImage.h Dist
    
    FreeImage: $(STATICLIB) $(SHAREDLIB)
    
    $(STATICLIB): $(STATICLIB)-x86_64
        $(LIPO) -create $(STATICLIB)-x86_64 -output $(STATICLIB)
    
    $(STATICLIB)-x86_64: $(MODULES_X86_64)
        $(LIBTOOL) -arch_only x86_64 -o $@ $(MODULES_X86_64)
    
    $(SHAREDLIB): $(SHAREDLIB)-x86_64
        $(LIPO) -create $(SHAREDLIB)-x86_64 -output $(SHAREDLIB)
    
    $(SHAREDLIB)-x86_64: $(MODULES_X86_64)
        $(CPP_X86_64) -arch x86_64 -dynamiclib $(LIBRARIES_X86_64) -o $@ $(MODULES_X86_64)
    
    .c.o-x86_64:
        $(CC_X86_64) $(CFLAGS_X86_64) -c $< -o $@
    
    .cpp.o-x86_64:
        $(CPP_X86_64) $(CPPFLAGS_X86_64) -c $< -o $@
    
    install:
        install -d -m 755 -o root -g wheel $(INCDIR) $(INSTALLDIR)
        install -m 644 -o root -g wheel $(HEADER) $(INCDIR)
        install -m 644 -o root -g wheel $(SHAREDLIB) $(STATICLIB) $(INSTALLDIR)
        ranlib -sf $(INSTALLDIR)/$(STATICLIB)
        ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(LIBNAME)
    
    clean:
        rm -f core Dist/*.* u2dtmp* $(MODULES_X86_64) $(STATICLIB) $(SHAREDLIB) $(SHAREDLIB)-x86_64
    

    【讨论】:

      【解决方案2】:

      作为克里斯托夫回答的补充:

      答案中提到的GCC 4.2 已经过时了,FreeImage 使用Clang 编译得很好。所以,我建议切换到Clang 工具链。

      【讨论】:

      • 你是对的!但我认为这作为评论会更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2013-04-03
      • 2013-05-03
      • 1970-01-01
      • 2013-07-19
      • 2013-03-03
      • 1970-01-01
      相关资源
      最近更新 更多