Automake 无法识别 Objective-C/C++

Posted

技术标签:

【中文标题】Automake 无法识别 Objective-C/C++【英文标题】:Automake doesn't recognize Objective-C/C++ 【发布时间】:2014-07-24 21:17:50 【问题描述】:

我有 configure.ac,它专为构建共享库(linux 和 macos)而设计。现在我想添加一个特殊的演示应用程序,它使用这个库并展示它的特性。然而,这个演示应用程序仅适用于 MacOS,并且其中包含 .mm 文件 (main.mm)。我正在尝试以这种方式为这个演示应用定义一个目标:

if OS_DARWIN
  EXTRA_PROGRAMS = app-demo
  app_demo_CC = OBJC
  app_demo_CXX = OBJC
  app_demo_SOURCES = demoapp/config.cc demoapp/config.h \
    demoapp/main.mm demoapp/AppDelegate.m \
    demoapp/renderer-stub.cc demoapp/renderer-stub.h \
    demoapp/view.cc demoapp/view.h
  app_demo_CPPFLAGS = ... # include directories here
  app_demo_LDFLAGS = ... # libraries and library search paths
endif

这是我的*** Makefile.am,如您所见,demoapp 文件夹包含演示应用程序的所有源代码和两个 Objective-C 文件:main.mm 和 AppDelegate.m。 但是,当我尝试运行 make app-demo 时,我得到了这个:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable

这意味着(我从制作日志中确认)main.mm 尚未编译,也没有链接。 有谁知道这个的解决方法?

【问题讨论】:

【参考方案1】:

我认为这些信息不足以调试问题。

我认为 automake 支持 ObjC++。调用 automake 时是否出现错误?您的 configure.ac 是否调用 AC_PROG_OBJCXX?如果您尝试手动编译文件,是否有效?

【讨论】:

是的,它可以工作,并且 automake 可以找到合适的编译器。请参阅我的回答,了解我是如何解决这个问题的。【参考方案2】:

通过在 Makefile.am 中定义单独的目标来解决,如下所示:

.mm.o :
      $(OBJCXX) -x objective-c++ -c @DEFS@ $(CPPFLAGS) $(app_demo_CPPFLAGS) $< -o $@

【讨论】:

你需要这个很奇怪。 Automake 应该发出它或类似的东西。我想知道你是否从输入中删除该行,重新运行 automake,然后检查生成的 Makefile.in,如果你看到的话。

以上是关于Automake 无法识别 Objective-C/C++的主要内容,如果未能解决你的问题,请参考以下文章

设置 %option prefix= 时如何让 automake 识别 flex 生成的非默认文件名

Objective-C 框架中的 Swift 类别在运行时无法识别

使用 LLVM ExecutionEngine 调用 Objective-C 方法时,所有选择器都无法识别

automake 以编程方式生成规则/使用宏

IOS/Objective-C:用于识别命名实体的 NSLinguisticTagger

在构建期间覆盖使用 automake/libtool 构建的共享库中的安装路径,以便在无法使用 DYLD_LIBRARY_PATH 时进行测试