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 方法时,所有选择器都无法识别
IOS/Objective-C:用于识别命名实体的 NSLinguisticTagger
在构建期间覆盖使用 automake/libtool 构建的共享库中的安装路径,以便在无法使用 DYLD_LIBRARY_PATH 时进行测试