我对MAC OS不熟悉,但是在MAC OS X上构建cpp应用程序时,使用g ++我发现链接器出现了奇怪的错误。
首先在一步我使用从cpp源生成的几个目标文件创建一个库,然后使用ar rvs命令创建一个存档。
如果我将此库链接到另一个使用库提供的某些类的cpp应用程序,则无法在链接时获取某些符号并抛出未定义的符号错误。
我知道,我可以使用nm在库中查看这些符号。和签名和字符串完全匹配.a文件。
还有许多其他符号,此库在链接时提供并得到识别。
用于链接的选项是
g++-framework IOKit -framework Carbon -L <> -l<lib>-L -l<lib> -o exe ./obj.o
和其他使用-L
的其他库的路径我不是MAC的专家,但是会员的任何建议都会很明显。
提前感谢
-brij
答案 0 :(得分:0)
链接时需要将目标文件(obj.o)放在库之前。
这样做的原因是,在处理对象时,链接器会保留未定义符号的列表。当它处理库时,它会添加它在库中找到的任何当前未定义的符号(从技术上讲,它适用于库中对象的级别)。通过将库放在第一位,处理它们时没有未定义的符号,因此不会添加库中的任何对象。