在MAC OS上链接错误

时间:2010-05-18 18:01:16

标签: c++ c linker

我对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

1 个答案:

答案 0 :(得分:0)

链接时需要将目标文件(obj.o)放在库之前。

这样做的原因是,在处理对象时,链接器会保留未定义符号的列表。当它处理库时,它会添加它在库中找到的任何当前未定义的符号(从技术上讲,它适用于库中对象的级别)。通过将库放在第一位,处理它们时没有未定义的符号,因此不会添加库中的任何对象。