我无法再次为申请人编写花店图书馆.事实证明我对花店有更大的问题(同样的错误来自最新的2010 Adacore GPL下载和Debian的存档中的2009版本).花店有一些低级问题但是当我查看生成的文件时,它似乎正确地包含了errno.h.
以下是我建立花店时会发生的事情:
未定义引用`c_ntohs'./posix-io.o:函数`posix__io__open':posix-io.adb :(.text + 0x4d1):未定义引用`__gnat_florist_open'./ posix-io.o:函数中` posix__io__open_or_create':posix-io.adb :(.text + 0xfca):未定义引用`__gnat_florist_open'collect2:ld返回1退出状态gnatlink:调用/usr/bin/gcc-4.4时出错gnatmake:***链接失败.josh @ Mini10:〜/ Demo $ gnatbind -I/usr/share/ada/adainclude/florist -I/usr/include demo josh @ Mini10:〜/ Demo $ gnatlink demo ./posix-implementation.o:函数`posix__implementation__set_ada_error_code ':posix-implementation.adb :(.text + 0x19e):未定义对`store_errno'的引用./posix-implementation.o:函数`posix__implementation__get_ada_error_code':posix-implementation.adb :(.text + 0x1ab):
如果正确包含errno.h的问题,似乎这个错误很常见.但据我所知,posix-cc文件看起来都是正确的.有人对如何解决这个问题有任何建议吗?Florist的make文件正确构建,因此我不知道它来自何处.
好吧,这结果是巨大的痛苦,但我找到了.
Florist绑定既可用作共享库,也可用作静态库(均已安装).您需要链接到库以解析所有引用(我实际上永远无法将库源代码编译到我的应用程序中).一旦你传递参数告诉编译阶段有关库,你必须提供要解决的.ads(至少)文件.
最终解决方案结束了这样:
gnatmake -aI/usr/share/ada/adainclude/florist -aO/usr/lib/ada/adalib/florist demo.adb -largs -lflorist
-aI
提供图书馆广告文件的路径. -aO
提供(在这种情况下)libflorist.so库文件的路径,最后(这是棘手的)你必须传递-lflorist
告诉它共享库这一切都是...但传递它将无法正常工作.你必须-largs
在它前面放置一个(用于编译和链接器),以便为编译阶段传递参数!没有它,那些阶段永远不会看到这个论点
那么你就是每个人!为了在Linux(GCC)下针对共享的Ada库编译和链接代码,您需要提供Library的Headers/Specs,Library位置和-llibname参数以及-largs以将它们传递到正确的位置!
我现在很高兴.希望这有助于其他人.