OS X Lion上libplist的编译错误:找不到string.h.

时间:2012-06-13 23:54:57

标签: c++ c osx-lion

我正在尝试为OS X编译Clementine。在编译依赖项的过程中,在libplist-1.3期间,我收到一个错误,编译器找不到string.h,assert.h,然后出现了一系列错误。

我不确定为什么会这样。我在处理大型C项目方面经验不足,并希望了解发生这种情况的原因。我肯定安装了Xcode命令行工具,并确保它们是最新的。此外,标准文件位于/usr/include

每个构建说明运行make后的输出:

cd libplist-1.3/build && PKG_CONFIG_PATH=/Users/dan/projects/sandbox/target/lib/pkgconfig cmake .. -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_INSTALL_PREFIX=/Users/dan/projects/sandbox/target -DQT_HEADERS_DIR=/Users/dan/projects/sandbox/target/include/ -DQT_LIBRARY_DIR=/Users/dan/projects/sandbox/target/bin -DENABLE_PYTHON=OFF
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    QT_HEADERS_DIR
    QT_LIBRARY_DIR


-- Build files have been written to: /Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/build
cd libplist-1.3/build && PATH=/Users/dan/projects/sandbox/target/bin:$PATH make -j2
[ 12%] [ 12%] Building C object src/CMakeFiles/plist.dir/plist.c.o
Building C object src/CMakeFiles/plist.dir/bplist.c.o
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/src/plist.c:23:20: error: string.h: No such file or directory
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/src/plist.c:24:20: error: assert.h: No such file or directory
In file included from /Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/src/plist.h:25,
                 from /Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/src/plist.c:25:
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/include/plist/plist.h:48:20: error: stdint.h: No such file or directory
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/include/plist/plist.h:52:23: error: sys/types.h: No such file or directory
In file included from /Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/src/plist.h:25,
                 from /Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/src/plist.c:25:
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/include/plist/plist.h:128: error: expected ‘)’ before ‘val’
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/include/plist/plist.h:137: error: expected ‘)’ before ‘val’
/Users/dan/projects/sandbox/clementine-dep/macosx/libplist-1.3/include/plist/plist.h:156: error: expected declaration specifiers or ‘...’ before ‘uint64_t’

..还有更多

更新

删除-j2标志时,libplist构建成功。现在我收到了一个新的错误:

Scanning dependencies of target libproxy
[ 54%] Building CXX object libproxy/CMakeFiles/libproxy.dir/extension_config.cpp.o
[ 57%] Building CXX object libproxy/CMakeFiles/libproxy.dir/extension_pacrunner.cpp.o
[ 60%] Building CXX object libproxy/CMakeFiles/libproxy.dir/extension_wpad.cpp.o
[ 63%] Building CXX object libproxy/CMakeFiles/libproxy.dir/proxy.cpp.o
/Users/dan/projects/sandbox/clementine-deps/macosx/libproxy-0.4.7/libproxy/proxy.cpp:433:15: error: use of undeclared identifier
      'strdup'; did you mean 'strcmp'?

1 个答案:

答案 0 :(得分:1)

从评论中部分复制:

尝试使用make代替make -j 2进行编译。有时,编译顺序可能会搞砸,并且在您链接到的包网站中明确提到了这一点。

对于strdup的问题,函数在string.h中为C语言声明,而cstring在C ++中声明。如果软件包构建正确并且没有创建重复的标头或尝试使用非标准位置的标头,那么从完全新鲜的构建开始可能会解决您的问题。

如果这不起作用,您需要浏览cmake日志并在包含路径中查找可能包含string.hcstring的目录,并且可能会被使用而是默认的。如果是这种情况,您肯定应该通知维护者并确定是否只是删除这些文件或包含路径是一个合适的修复。

除此之外,我认为你必须通过他们的网站与软件包维护者联系。

祝你好运!