2012-06-13 73 views
1

我想编译Clementine OS X.编译依赖关系的过程中,在libplist-1.3期间,我得到一个错误,编译器找不到string.h,assert.h等,然后出现一系列的错误。编译OS X Lion上的libplist错误:string.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

你试过编译make而不是make -j 2吗?有时编译顺序可能会被搞砸(这在您链接的包站点中明确声明) – Mosby

+0

工作正常!但是现在我在另一个库中得到一个新的错误。 – Dan

+0

根据'man strdup',这个函数应该在'string.h'中声明。检查以确保有声明。另外,你通过调用make调用哪个编译器?它是否正确设置为gcc/g ++?最后,当您遇到这些类型的错误时,我发现编写快速程序以检查是否可以使用导致问题的函数非常有用。如果我可以使用它,那么在源代码包或构建程序中有一个问题。幸运的是,它是开源的,所以你可以修复它并通知维护者!好极了! – Mosby

回答

1

从注释部分复制:

尝试make而不是make -j 2编译。有时编译顺序可能会搞砸,这在您链接的包站点中明确提到。

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

如果这不起作用,您需要通过cmake日志并查找包含路径中的目录,其中可能包含string.h或,并且可能会使用默认值。如果是这种情况,你应该明确通知维护者,并找出是否简单地删除这些文件或包含路径是一个适当的修复。

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

祝你好运!