Использование библиотеки C / C ++ в решении Visual Studio Mac (приложение Xamarin.Mac)?

Я пытаюсь использовать библиотеку C ++ (.a) в Visual Studio для Mac (a.k.a. Xamarin)
Я нашел в Интернете некоторую информацию о связывании нативных библиотек в Xamarin (https://developer.xamarin.com/guides/ios/advanced_topics/native_interop/), но это кажется устаревшим, так как Visual Studio для Mac отсутствует.

Я загрузил оба проекта в https://github.com/dawmster/XamarinAndCpp

содержание

  1. MyCppLib — проект XCode, производящий libMyCppLib.a
  2. XamarinMacApp — решение Visual Studio для Mac
  3. libMyCppLib.a — это продукт MyCppLib, XamarinMacApp ссылается на него.

Что ладно

MyCppLib прекрасно компилируется и выдает libMyCppLib.a
Я намеревался экспортировать только две функции C (my_C_Function, my_second_C_FunctionMyCppLib.cpp) но я не могу лишить других символов — что является корнем проблемы

extern "C" {
int my_C_Function();
int my_second_C_Function();
}

В XamarinMacApp ссылка на libMyCppLib.a (добавлена ​​в решение).
И my_C_Function вызывается в AppDelegate.cs следующее:

using System.Runtime.InteropServices;

namespace XamarinMacApp
{

[Register("AppDelegate")]
public class AppDelegate : NSApplicationDelegate {

public AppDelegate(){}

[DllImport("__Internal")]
static extern int my_C_Function();
public override void DidFinishLaunching(NSNotification notification)
{
int myretval = my_C_Function();
}

public override void WillTerminate(NSNotification notification)
{
// Insert code here to tear down your application
}
}
}

Что не хорошо

XamarinMacApp — не компилируется со следующей ошибкой:

Обратите внимание, что функции C ( my_C_Function, my_second_C_Function не указан в ошибке ниже).
Кажется, только стандартная библиотека C ++ не может быть связана.

Полный журнал компилятора Visual Studio Mac.

Полный журнал Xcode компилятора

Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::ios_base::getloc() const", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)", referenced from:
l007 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
l007 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::cout", referenced from:
l002 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::ctype<char>::id", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::locale::~locale()", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::__1::ios_base::clear(unsigned int)", referenced from:
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"std::terminate()", referenced from:
l008 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"operator delete(void*)", referenced from:
l001 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"operator new(unsigned long)", referenced from:
l001 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"___cxa_begin_catch", referenced from:
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l008 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"___cxa_end_catch", referenced from:
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
"___gxx_personality_v0", referenced from:
l004 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l005 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
l007 in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
Dwarf Exception Unwind Info (__eh_frame) in libMyCppLib.a(libMyCppLib.a-x86_64-master.o)
ld: symbol(s) not found for architecture x86_64
clang : error : linker command failed with exit code 1 (use -v to see invocation)

MMP : error MM5109: Native linking failed with error code 1.  Check build log for details.
Done building target "_CompileToNative" in project "XamarinMacApp.csproj" -- FAILED.

Done building project "XamarinMacApp.csproj" -- FAILED.

Есть идеи, как двигаться дальше?

6

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]