代码之家  ›  专栏  ›  技术社区  ›  Lee Hambley

用Autotool在Windows和Mac上编译

  •  2
  • Lee Hambley  · 技术社区  · 14 年前

    我有一个问题,试图使用一个简单的项目的AutoToo工具,任务很简单,使用ObjeOffic C在Mac OSX上,和C++上的Windows(明文)-与一些 C 胶合在中间。

    项目的结构如下(减去所有自动生成的文件):

        ./aclocal.m4
        ./configure
        ./configure.ac
        ./Makefile.am
        ./src/darwin/greet.m
        ./src/greet.h
        ./src/main.cpp
        ./src/Makefile.am
        ./src/mingw32/greet.cpp    
    

    github in a gist . (不想在这里发垃圾邮件)

    我在更改之间使用以下命令:

    $ autoreconf -vis && ./configure && make
    

    here in another gist

    ....
    Making all in src
    g++  -g -O2   -o greetings main.o  
    Undefined symbols:
      "greet()", referenced from:
          _main in main.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make[1]: *** [greetings] Error 1
    make: *** [all-recursive] Error 1
    

    我对自动工具非常陌生,在IRC的几个好人的帮助下,我已经走了很长的路,但是我认为我在这里犯了一个概念上的错误,真的希望我犯了一个简单的错误。

    我从医生那里了解到 EXTRA_progname_SOURCES 应该包含所有可能的文件,并且设置的条件应该用于选择正确的文件。

    src/Makefile.am 为了明确地包含我的平台的源代码(大多数情况下是Max OS X Darwin),输出保持完全相同。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jack Kelly    14 年前

    我知道你指的是 greet.mm greet.m 在这个问题上。汽车制造商似乎没有 natively support AC_PROG_OBJC 在你的 configure.ac . 如果你的意思是ObjuleC++代码,你需要这样做 via a suffix rule .

        2
  •  0
  •   Alex F    14 年前

    g++-g-O2-o问候语main.o

    这一行尝试从main.o构建greets可执行文件。例如,如果greet()函数是在其他文件中定义的,问候.cpp,应该是:

    可能,这条线来自生成文件.am

    来源=主.cpp问候.cpp

    在生成文件.am您有:

    if OS_DARWIN  
    greetings_SOURCES += darwin/greet.mm
    endif
    if OS_MINGW32  
    greetings_SOURCES += mingw32/greet.cpp
    endif