因此,假设您要构建Boost"Getting Started"示例并使用Xcode项目链接到它们,而不是在命令行中构建.你尝试只有标题的选项,它工作正常.
但是你接下来的例子来源:
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
你做了以下事情:
遗憾的是,如果您打开控制台(运行|控制台),您将看到一个无法找到dylib的错误:
dyld: Library not loaded: libboost_regex.dylib
Referenced from: /Users/matt/Documents/Boost/test/GettingStarted/build/Debug/GettingStarted
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
因此,不知道让Xcode执行此操作的更好方法,您将dylib复制到your_project/build/debug /并运行!万岁!
你是细节导向的人,你在标准中键入一些东西来试试:
> Subject: foo bar baz
> foo bar baz
Run Code Online (Sandbox Code Playgroud)
然后是段错误.
Program received signal: “EXC_BAD_ACCESS”.
Run Code Online (Sandbox Code Playgroud)
ACK!
但不要害怕.我知道问题是什么!如果没有人打败我,我会在午餐后发布解决方案.
这里的问题是 boost 的默认构建与项目的调试构建不能很好地配合。您需要使用调试变体来构建 boost,具体操作如下:
./bjam install variant=debug define=_GLIBCXX_DEBUG --with-regex
Run Code Online (Sandbox Code Playgroud)
_GLIBCXX_DEBUG实际上是 Xcode 项目中导致冲突的选项。
然后,您可以将库的调试版本与您的调试 Xcode 项目链接起来。(我认为这就是 MacPorts 预编译二进制文件的生成方式。)
请记住,您可以使用 bjam 变体同时构建多个目标。
另外:如果重建后不起作用,请检查以确保您链接的库版本实际上是您刚刚重建的版本!
_GLIBCXX_DEBUG另外:相反,从调试配置中删除定义可能会起作用。双击目标中的可执行文件以打开项目选项,然后_GLIBCXX_DEBUG从预处理器宏中删除。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3719 次 |
| 最近记录: |