背景信息
我在一家航空航天公司的Android应用程序上实习,他们希望我开发一个应用程序,从他们购买的传感器中获取数据,并在移动的应用程序上无线实时显示(* 通过wifi*)。传感器制造商为我们提供了他们的驱动程序文件,用于制作我自己的程序(* 他们拒绝提供原始的.cpp版本的库 *)
制造商驱动程序文件:
card.h
libcard.so
utils.h
libutils.so
我已经成功地使用上述驱动程序构建了一个仅限终端的桌面版应用程序,并使用WSL 2上的g手动链接了.so文件。现在,我想使用我在驱动程序上创建的C库来支持移动的版,它最终将是跨平台的,但目前我的主要关注点是Xamarin. Android。
我的程式库( 需要所有制造业驱动程序档案 ):
main.cpp
(* 仅用于测试wfb.*
库 *)wfb.h
wfb.cpp
(* 将转换为.so以便在Xamarin应用程序中使用 *)
主要问题
我知道如何在Xamarin.Android应用程序中使用C++共享库(如果只有一层依赖关系),但我完全不知道如何处理依赖关系(* 我的库 )具有自己的依赖项( 驱动程序文件 *)。我认为我需要card.h
、libcard.so
、utils.h
、libutils.so
、& wfb.cpp
编译成wfb.so
,这样我就可以在Xamarin lib目录中包含wfb.so
& wfb.h
,这样我就可以从C#调用我在wfb.cpp
中创建的函数,但我不能让它起作用。我想这是因为我走错了路。
免责声明:
我是100%的图书馆和移动的应用程序的新手,所以如果我在这里问的是荒谬的,或者有一个更好/更容易的变通办法,请让我知道。
1条答案
按热度按时间ffdz8vbo1#
C++使用链接器解决了它的依赖关系。所以在编译时(创建目标文件时),你只需要头文件,然后链接器出现,并在构建可执行文件时解决到另一个库的链接,但在创建共享库时,它只会被编译,链接器稍后会被你的C#应用程序使用。所以如果你的wfb.so有另一个依赖关系(libutils.so),你也必须通过如果wfb.so需要调用libutils.so中的某个函数,则C#应用程序知道符号跳转到哪里。如果未加载依赖库,则会因某些分段错误或类似错误而失败。
对于头文件,您共享库的Makefile只需要使用-I标志来指向头文件所在的目录。