我很难尝试使用POCO库来构建一些代码。
当我尝试构建
时,我得到以下内容Undefined symbols for architecture x86_64:
"Poco::Net::SocketAddress::SocketAddress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short)", referenced from:
.....
ld: symbol(s) not found for architecture x86_64
现在抓住了:我正在使用-lPocoFoundation -lPocoNet -lPocoUtil进行链接
我错过了什么?
(我应该说我在Mac OS X 10.8.2上使用clang进行编译
答案 0 :(得分:3)
我有同样的问题。我发现更改xcode构建设置很有用。 将C ++标准库从libc ++(支持C ++ 11的LLVM C ++标准库)更改为libstdc ++(GNU C ++标准库)。然后它将通过建设。
答案 1 :(得分:3)
我遇到了同样的问题,对我来说Leezi写的很好。我使用的是版本 1.4.6。
我唯一需要做的就是再次编译Poco库(因为它是为了支持C ++ 11而编译的):
./configure --config=Darwin64-gcc
make
sudo make install
另一种方法是使用C ++ 11支持编译Poco库,但它有点复杂。 首先,我必须在Foundation中修改两个源文件:
<强>粉底/ SRC / NumberParser.cpp:强>
127c127
< return std::sscanf(s.c_str(), "%"I64_FMT"d%c", &value, &temp) == 1;
---
> return std::sscanf(s.c_str(), "%" I64_FMT "d%c", &value, &temp) == 1;
144c144
< return std::sscanf(s.c_str(), "%"I64_FMT"u%c", &value, &temp) == 1;
---
> return std::sscanf(s.c_str(), "%" I64_FMT "u%c", &value, &temp) == 1;
161c161
< return std::sscanf(s.c_str(), "%"I64_FMT"x%c", &value, &temp) == 1;
---
> return std::sscanf(s.c_str(), "%" I64_FMT "x%c", &value, &temp) == 1;
<强>粉底/ SRC / DirectoryWatcher.cpp:强>
51a52
> #include <unistd.h>
我也修改了 build / config / Darwin-clang 文件:
55,56c55,56
< CXXFLAGS = $(ARCHFLAGS) -Wall -Wno-sign-compare
< LINKFLAGS = $(ARCHFLAGS)
---
> CXXFLAGS = $(ARCHFLAGS) -Wall -Wno-sign-compare -std=c++11 -stdlib=libc++
> LINKFLAGS = $(ARCHFLAGS) -stdlib=libc++
80c80
< SYSLIBS = -ldl
---
> SYSLIBS = -ldl -lstdc++
我只需要静态库,所以我只编译了:
./configure --static --omit=Data --config=Darwin64-clang --poquito -no-tests -no-samples -no-shared
make clean
make
sudo make install
如果您还需要样品和测试,那么我认为您应该制作一个xcode项目并进行设置或深入到makefile中... 我希望这有帮助...