Создание и использование простого .dylib

Какой самый простой способ создать и использовать .dylib в Xcode?

Вот что у меня есть до сих пор:

Файл: 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.


person Maxpm    schedule 10.12.2010    source источник


Ответы (2)


Вы не включаете файл библиотеки, но заголовок (.h)

Так что пиши

#include "MyLib.h"

Затем вы должны сказать компилятору, чтобы ваша программа связалась с файлом dylib. Если вы используете Xcode, вы можете просто перетащить файл dylib в свой проект.

person lucas clemente    schedule 12.12.2010

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.dylib из hello.cpp, вы можете удалить ненужные биты, которые находятся там только потому, что это то, что есть в моей системе, и может помочь, если вы захотите сделать немного более сложные вещи позже. -fPIC в компиляции является обязательным. -dynamiclib - это то, что делает dylib.

person Yttrill    schedule 10.12.2010