c++ - 使用 Autotool 在 Windows 和 Mac 上编译

标签 c++ objective-c c mingw autotools

我在尝试将 autotools 用于一个简单的设计项目时遇到问题,任务很简单,在 Mac OSX 上使用 Objective-C,在 Windows (mingw) 上使用 C++ - 加入一些 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

我是 autotools 的新手,在 IRC 上几个好人的帮助下已经走了很长一段路,但我认为我在这里犯了一个概念性错误,真的希望我犯了一个简单的错误.

我从文档中了解到 EXTRA_progname_SOURCES 应该包含所有可能的文件,并且设置的条件应该可以选择正确的文件。

令人担忧的是,我认为我的 makefile 没有被重新制作,因为即使我更改 src/Makefile.am 中的行以包含明确针对我的平台(即 Max OS X)的源代码 Darwin ,大部分时间)——输出保持完全相同。

最佳答案

我看到您在要点中指的是 greet.mm,但在问题中指的是 greet.m。 Automake 似乎没有natively support Objective-C++ 代码。对于 Objective-C 代码,您需要在 configure.ac 中包含 AC_PROG_OBJC。如果你真的想要 Objective-C++ 代码,你需要这样做 via a suffix rule .

关于c++ - 使用 Autotool 在 Windows 和 Mac 上编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710180/

相关文章:

ios - 如何快速安排每日推送通知?

c - 使用 OpenCV 的 C 语言图形用户界面

c - 通过网络传输 GetBitmapBits(),安全吗?

c++ - 如果线程是从 dll 创建的,std::async 是否会阻止进程退出?

c++ - 将容器分成 block ,C++

c++ - 为什么要使用指针?

C++ 继承 : Error: candidate expects 1 argument, 0 提供

objective-c - 内存泄漏和僵尸有什么区别?

ios - SWRevealViewController - 切换到另一个时如何保留前 View

c - 程序的行为根据调用 fork 的位置而变化