我正在努力针对sample binary对我已经编译的a project进行制作。
编译失败,
$ make
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz
tileinfo.cpp:7:10: fatal error: 'vector_tile_compression.hpp' file not found
#include "vector_tile_compression.hpp"
^
1 error generated.
make: *** [tileinfo] Error 1
我可以在项目源中看到缺少的头文件。我想在编译时包含它,以便可以找到它。我假设只是复制所有来源是不正确的&我应该能够指向这个头文件。我尝试了-I
标志,但无论我给它什么路径,它仍然无法找到这个头文件。
所以我塌陷并复制头文件......
$ cp ../../src/vector_tile_compression.hpp .
$ make
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz
In file included from tileinfo.cpp:7:
./vector_tile_compression.hpp:5:10: fatal error: 'vector_tile_config.hpp' file not found
#include "vector_tile_config.hpp"
^
1 error generated.
make: *** [tileinfo] Error 1
好的,它现在在一个新文件之后,它只是想要越来越多。让我们将整个项目源移动到示例中......
$ cp ../../src/* .
$ make
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz
In file included from tileinfo.cpp:7:
In file included from ./vector_tile_compression.hpp:5:
./vector_tile_config.hpp:10:10: fatal error: 'protozero/types.hpp' file not found
#include <protozero/types.hpp>
^
1 error generated.
make: *** [tileinfo] Error 1
那看起来有点像进步(虽然我担心我转了一圈)。它想要protozero。它包含在名为deps
的项目的子文件夹中。好的,我试着把它包括在内。
$ make -I ../../deps/protozero/include/
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz
In file included from tileinfo.cpp:7:
In file included from ./vector_tile_compression.hpp:5:
./vector_tile_config.hpp:10:10: fatal error: 'protozero/types.hpp' file not found
#include <protozero/types.hpp>
^
1 error generated.
make: *** [tileinfo] Error 1
同样,我在路径上尝试了一些变体,但是这个-I
标志,我认为它没有按我认为的那样做。
所以在绝望中我复制了依赖。
$ cp -r ../../deps/protozero/include/protozero .
$ make
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz
In file included from tileinfo.cpp:7:
In file included from ./vector_tile_compression.hpp:5:
./vector_tile_config.hpp:10:10: error: 'protozero/types.hpp' file not found with <angled> include; use "quotes" instead
#include <protozero/types.hpp>
^~~~~~~~~~~~~~~~~~~~~
"protozero/types.hpp"
此消息告诉我,我不应该复制文件,而是链接到它们。显然,我走错了路。我应该做什么呢?
答案 0 :(得分:1)
你快到了。我会以更干净的方式回顾这些步骤(即使你已经完成了一些工作)。
首先,您需要下载依赖项。 Looking at mapnik-vector-tile
project Makefile
我们有:
PROTOZERO_REVISION=v1.3.0 git clone https://github.com/mapbox/protozero.git ./deps/protozero && cd ./deps/protozero && git checkout $(PROTOZERO_REVISION)
从项目的根文件夹运行此命令后,您的deps
文件夹中包含protozero
。
最后,您必须通过附加
告诉编译器这个新的包含路径-I./deps/protozero/include
到CXXFLAGS
的{{1}}(假设您使用的文件结构类似于您提供的the one内的the binary link)。