在 Xcode 中创建和使用 .dylib 的最基本方法是什么?
这是我到目前为止所拥有的:
文件:MyLib.h
#include <string>
namespace MyLib
{
void SayHello(std::string Name);
}
文件:MyLib.cpp
#include <string>
#include <iostream>
#include "MyLib.h"
void MyLib::SayHello(std::string Name)
{
std::cout << "Hello, " << Name << "!";
}
我将项目编译为动态库,但如何将其与其他项目一起使用? 我尝试过这样的事情:
文件:MyLibTester.cpp
#include "libMyLib.dylib"
int main()
{
MyLib::SayHello("world");
return 0;
}
但这给了我超过 400 个错误(大部分是沿着
Stray \123 in program
的方向。使用 <libMyLib.dylib>
给了我一个 file not found
错误。
您不包含库文件,但包含标头 (.h)
所以写
#include "MyLib.h"
然后,您必须告诉程序的编译器链接到 dylib 文件。如果您使用的是 Xcode,您只需将 dylib 文件拖到您的项目中即可。
FWIW 我的生产编译器使用这个:
/usr/bin/g++ -c -fno-common -fPIC -Wall \
-Wno-invalid-offsetof -Wfatal-errors -fPIC \
-O3 -fomit-frame-pointer --inline -DTARGET_BUILD \
-I/usr/local/lib/felix/felix-1.1.6rc1/lib/rtl \
-I/usr/local/lib/felix/felix-1.1.6rc1/config/target \
./hello.cpp -o ./hello.os
/usr/bin/g++ -fno-common -dynamiclib -O3 \
-fomit-frame-pointer --inline \
./hello.os -o ./hello.dylib \
-L/usr/local/lib/felix/felix-1.1.6rc1/lib/rtl \
-lflx_dynamic -lflx_gc_dynamic -lflx_judy_dynamic -lflx_exceptions_dynamic
要从 hello.cpp 生成 hello.dylib,您可以删除非必要的位,这些位之所以存在,是因为这就是我的系统中的内容,如果您以后想做一些更高级的事情,可能会有所帮助。编译中的-fPIC是强制的。 -dynamiclib 是 dylib 的组成部分。