Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Boost Asio GCC链路错误 我刚刚安装了一个带有XUBUTU 12.10的干净的VM,我试图通过一些C++代码移植到Windows上。首先,我安装了Virtualbox来宾添加和GCC,我可以编译代码_C++_Linux_Gcc_Boost_Boost Asio - Fatal编程技术网

Boost Asio GCC链路错误 我刚刚安装了一个带有XUBUTU 12.10的干净的VM,我试图通过一些C++代码移植到Windows上。首先,我安装了Virtualbox来宾添加和GCC,我可以编译代码

Boost Asio GCC链路错误 我刚刚安装了一个带有XUBUTU 12.10的干净的VM,我试图通过一些C++代码移植到Windows上。首先,我安装了Virtualbox来宾添加和GCC,我可以编译代码,c++,linux,gcc,boost,boost-asio,C++,Linux,Gcc,Boost,Boost Asio,我已从internet(boost_1_52)下载了boost库,并从asio网站(boost_asio_1_4_8)下载了asio库,我已使用以下说明安装了多线程共享链接版本: ./bootstrap.sh --prefix=/usr && ./b2 stage threading=multi link=shared as root: 我知道boost可以工作,因为我已经能够在这里编译测试应用程序(与lboost_regex链接),并且它可以完美地工作: #include

我已从internet(boost_1_52)下载了boost库,并从asio网站(boost_asio_1_4_8)下载了asio库,我已使用以下说明安装了多线程共享链接版本:

./bootstrap.sh --prefix=/usr &&
./b2 stage threading=multi link=shared

as root: 
我知道boost可以工作,因为我已经能够在这里编译测试应用程序(与lboost_regex链接),并且它可以完美地工作:

#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;
    }
}
我把我的编译器扔到这里:

gcc client.cpp-I/usr/include/boost-lboost_系统-lboost_线程-lboost_序列化

这给了我一个错误:

connection.hpp:75:35: error: template argument 1 is invalid
connection.hpp:75:35: error: template argument 2 is invalid
connection.hpp:75:44: error: invalid type in declaration before ‘;’ token
connection.hpp:76:13: error: request for member ‘push_back’ in ‘buffers’, which is of non-class type ‘int’
connection.hpp:76:23: error: ‘asio’ is not a class or namespace
connection.hpp:77:13: error: request for member ‘push_back’ in ‘buffers’, which is of non-class type ‘int’
connection.hpp:77:23: error: ‘asio’ is not a class or namespace
connection.hpp:78:5: error: ‘asio’ is not a class or namespace
connection.hpp:78:23: error: ‘socket_’ was not declared in this scope
connection.hpp: In member function ‘void s11n_example::connection::async_read(T&, Handler)’:
connection.hpp:87:15: error: ‘asio’ does not name a type
connection.hpp:87:31: error: expected unqualified-id before ‘&’ token
connection.hpp:87:31: error: expected ‘)’ before ‘&’ token
connection.hpp:87:31: error: expected initializer before ‘&’ token
connection.hpp:90:5: error: ‘asio’ has not been declared
connection.hpp:90:22: error: ‘socket_’ was not declared in this scope
connection.hpp:90:31: error: ‘asio’ has not been declared
connection.hpp:91:21: error: ‘f’ was not declared in this scope
connection.hpp:92:17: error: ‘asio’ has not been declared
client.cpp: At global scope:
client.cpp:26:10: error: ‘asio’ has not been declared
client.cpp:26:26: error: expected ‘)’ before ‘&’ token
client.cpp:43:29: error: ‘asio’ does not name a type
client.cpp:43:45: error: expected unqualified-id before ‘&’ token
client.cpp:43:45: error: expected ‘)’ before ‘&’ token
client.cpp:43:35: error: expected ‘;’ at end of member declaration
client.cpp:43:47: error: ISO C++ forbids declaration of ‘e’ with no type [-fpermissive]
client.cpp:43:47: error: expected ‘;’ at end of member declaration
client.cpp:43:48: error: expected unqualified-id before ‘)’ token
client.cpp:125:1: error: expected ‘}’ at end of input
client.cpp:125:1: error: expected unqualified-id at end of input
client.cpp:125:1: error: expected ‘}’ at end of input
我真的很困惑,好像我没有构建boost或者我错过了另一个链接。我也尝试过与Winsock链接,但没有结果。请帮忙


欢呼声

看起来像是
boost/asio.hpp
没有被正确包含

我不记得前缀选项的确切作用,但我认为你的问题可能就在那里。boost目录可能不在
/usr/include/boost
中,但可能在
/usr/boost

这是一种可能性。第二个是,您需要传递
/usr/include/boost
,而不是传递
/usr/include
,即

gcc client.cpp -I /usr/include -lboost_system -lboost_thread -lboost_serialization 

如果查看示例文件,例如connection.cpp示例,它包括
boost/asio.hpp
boost/
部分指的是编译器应该在您使用
-I
指定的包含路径中查找的文件夹。因此,如果指定了
/usr/include/boost
,编译器将查找
/usr/include/boost/boost/asio.hpp
(注意出现了两次
boost
)。

看起来
boost/asio.hpp
没有正确包含

我不记得前缀选项的确切作用,但我认为你的问题可能就在那里。boost目录可能不在
/usr/include/boost
中,但可能在
/usr/boost

这是一种可能性。第二个是,您需要传递
/usr/include/boost
,而不是传递
/usr/include
,即

gcc client.cpp -I /usr/include -lboost_system -lboost_thread -lboost_serialization 

如果查看示例文件,例如connection.cpp示例,它包括
boost/asio.hpp
boost/
部分指的是编译器应该在您使用
-I
指定的包含路径中查找的文件夹。因此,如果指定了
/usr/include/boost
,编译器将查找
/usr/include/boost/boost/asio.hpp
(注意出现了两次
boost
)。

我想我现在已经解决了这个问题。使用bjam和自动安装程序似乎没有什么效果(出于某种原因,它无法解析这些路径)

无论如何,我下载了ASIO源代码(这次不是boost),并将其放在我桌面上的一个目录中。以类似于我在Visual Studio的windows上执行此操作的方式,我成功地将其链接到:

g++ client.cpp -I/home/devbox/desktop/asio-1.5.3/include -   L/home/devbox/Desktop/boost_1_53_0/stage/lib -lboost_system -lboost_thread -lboost_serialization -o test

大家干杯

我想我现在已经解决了这个问题。使用bjam和自动安装程序似乎没有什么效果(出于某种原因,它无法解析这些路径)

无论如何,我下载了ASIO源代码(这次不是boost),并将其放在我桌面上的一个目录中。以类似于我在Visual Studio的windows上执行此操作的方式,我成功地将其链接到:

g++ client.cpp -I/home/devbox/desktop/asio-1.5.3/include -   L/home/devbox/Desktop/boost_1_53_0/stage/lib -lboost_system -lboost_thread -lboost_serialization -o test

大家好

您正在交替使用gcc和g++。不起作用的行使用gcc,但起作用的行使用g++。使用g++而不是gcc可能会影响使用的默认包含路径。您最初的错误不是链接。它正在编译。另外,如果使用boost版本,asio名称空间不是asio。它是boost::asio。

您正在交替使用gcc和g++。不起作用的行使用gcc,但起作用的行使用g++。使用g++而不是gcc可能会影响使用的默认包含路径。您最初的错误不是链接。它正在编译。另外,如果使用boost版本,asio名称空间不是asio。它是boost::asio。

为什么-I/usr/include/boost而不是-I/usr/include?为什么-I/usr/include/boost而不是-I/usr/include?如果我使用安装程序,它会将boost文件放入/usr/include/boost/中,是的,其中有一个asio.hpp文件。但是,如果我尝试使用-I/usr/include/it进行编译,则找不到asio.hpp文件,因此,我使用的是完整目录。这就像它没有扫描所有的子目录一样。@user207888-你的行是“#include”还是仅仅是“#include”?如果我使用安装程序,它会将boost文件放入/usr/include/boost/中,是的,其中有一个asio.hpp文件。但是,如果我尝试使用-I/usr/include/it进行编译,则找不到asio.hpp文件,因此,我使用的是完整目录。就像它没有扫描所有的子目录一样。@user207888-你的行是“包含”还是“包含”?