我有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
这意味着(我从make日志中确认)main.mm尚未编译,也没有链接。 有谁知道这方面的解决方法?
答案 0 :(得分:0)
我不认为这是调试问题的足够信息。
我认为automake支持ObjC ++。调用automake时会出错吗?你的configure.ac是否调用AC_PROG_OBJCXX?如果您尝试手动编译文件,它是否有效?
答案 1 :(得分:0)
通过在Makefile.am中定义单独的目标来解决此问题:
.mm.o :
$(OBJCXX) -x objective-c++ -c @DEFS@ $(CPPFLAGS) $(app_demo_CPPFLAGS) $< -o $@