首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有Xcode的Mac中嵌入框架

在没有Xcode的Mac中嵌入框架
EN

Stack Overflow用户
提问于 2020-02-23 18:46:59
回答 1查看 217关注 0票数 2

我现在正试图在macOS上创建一个游戏引擎,并且只是尝试设置一个makefile来将代码编译成一个没有Xcode的macOS应用程序包。只要链接src代码,我就可以轻松地创建包,但我希望将其嵌入到框架中。如果我使用Xcode嵌入框架,那么它确实很容易,但我不知道它是如何实现这一效果的。下面是我的makefile的代码:

代码语言:javascript
复制
# Fill in Details for Compiler
PRJNAME = YetiGame
GAMEFILES = Example/Game.cpp
COMPILER = clang++

# Don't Change Unless Modifying Engine
LIBFILES = Yeti/Application/Application.cpp
OSXMACROS = -D YETI_PLATFORM_MACOS
SRCPATH = $(shell pwd)/
LIBFLAGS = -I $(SRCPATH) -framework Cocoa -framework Metal -framework Metalkit -framework QuartzCore -framework Foundation -o $(PRJNAME) -F$(SRCPATH) -framework @rpath@executable_path/../Frameworks/Neptune -v
LIBFILES = Yeti/Application/Application.cpp Yeti/Renderer/Metal/2D/metalRenderer2D.mm Yeti/Renderer/Metal/metalView.mm Yeti/Renderer/Metal/metalApplication.mm Yeti/Renderer/Metal/metalApplicationWrapper.mm Yeti/Renderer/Metal/metalDelegate.mm Yeti/Renderer/Metal/metalWindow.mm

app:
    $(COMPILER) $(LIBFILES) $(GAMEFILES) $(LIBFLAGS) $(OSXMACROS)
    mkdir -p _macOS/Contents/macOS/
    mv $(PRJNAME) _macOS/Contents/macOS/YetiExecutable
    cp Resources/Info.plist _macOS/Contents/Info.plist
    mkdir _macOS/Contents/Resources/
    cp Resources/temp.icns _macOS/Contents/Resources/temp.icns
    mv _macOS $(PRJNAME).app

clean:
    rm -R $(PRJNAME).app

现在,我只是用Xcode编译了一个框架,并希望将它链接到我的项目中,只需记录一些内容并在Xcode中进行测试。我希望能够用xcode编译框架,并从Xcode外部使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 14:17:28

在MacOS上动态链接库有几种不同的方法。一种选择是使用dlopen()。这允许用户在代码中手动链接到库。下面是在OpenGL函数加载器中使用的一个示例:

代码语言:javascript
复制
#include <stdlib.h>
#include <dlfcn.h>

static void* libgl;

void CloseOpenGL()
{
  dlclose(libgl);
}

bool LoadOpenGL()
{
  libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL);

  if (!libgl)
    return false;

  atexit(CloseOpenGL);
  return true;
}

void* LoadFunctionProc(const char* name)
{
  return dlsym(libgl, name);
}

另一种选择是在链接时指定库。当您链接到动态(或静态)库时,这就是Xcode在幕后所做的事情。clang的标志是-l

在这两种情况下,您都需要小心确保可执行文件能够在运行时找到库。对于系统库,链接器应该自动处理它。但是,如果您创建了一个应用程序包,则需要将库保存在包中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60365607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档