SerialStream не называет тип

Я использую Ubuntu 14.04.
Я хочу использовать libSerial для проекта, как описано Вот.
Я установил библиотеку, используя sudo apt-get install libserial-dev,

Я написал небольшую программу (ну, на самом деле это не программа):

#include "SerialStream.h"#include <iostream>

#define PORT "/dev/ttyUSB0"
SerialStream ardu;

using namespace std;
using namespace LibSerial;

Но компилятор говорит: ‘SerialStream’ does not name a type

Любая помощь?

РЕДАКТИРОВАТЬ:
После размещения SerialStream ardu после строки пространства имен проблема еще более странная:

g++ main.cpp -o ArduCom
/tmp/ccNzzINg.o: In Funktion `main':
main.cpp:(.text+0x7a): not defined reference to `LibSerial::SerialStream::Open(std::string, std::_Ios_Openmode)'
main.cpp:(.text+0x12d): not defined reference to `LibSerial::SerialStream::SetBaudRate(LibSerial::SerialStreamBuf::BaudRateEnum)'
main.cpp:(.text+0x181): not defined reference to `LibSerial::SerialStream::SetCharSize(LibSerial::SerialStreamBuf::CharSizeEnum)'
main.cpp:(.text+0x1d5): not defined reference to `LibSerial::SerialStream::SetParity(LibSerial::SerialStreamBuf::ParityEnum)'
main.cpp:(.text+0x229): not defined reference to `LibSerial::SerialStream::SetNumOfStopBits(short)'
main.cpp:(.text+0x27d): not defined reference to `LibSerial::SerialStream::SetFlowControl(LibSerial::SerialStreamBuf::FlowControlEnum)'
/tmp/ccNzzINg.o:(.rodata._ZTVN9LibSerial15SerialStreamBufE[_ZTVN9LibSerial15SerialStreamBufE]+0x48): not defined reference to `LibSerial::SerialStreamBuf::showmanyc()'
/tmp/ccNzzINg.o:(.rodata._ZTVN9LibSerial15SerialStreamBufE[_ZTVN9LibSerial15SerialStreamBufE]+0x50): not defined reference to `LibSerial::SerialStreamBuf::xsgetn(char*, long)'
/tmp/ccNzzINg.o:(.rodata._ZTVN9LibSerial15SerialStreamBufE[_ZTVN9LibSerial15SerialStreamBufE]+0x58): not defined reference to `LibSerial::SerialStreamBuf::underflow()'
/tmp/ccNzzINg.o:(.rodata._ZTVN9LibSerial15SerialStreamBufE[_ZTVN9LibSerial15SerialStreamBufE]+0x68): not defined reference to `LibSerial::SerialStreamBuf::pbackfail(int)'
/tmp/ccNzzINg.o:(.rodata._ZTVN9LibSerial15SerialStreamBufE[_ZTVN9LibSerial15SerialStreamBufE]+0x70): not defined reference to `LibSerial::SerialStreamBuf::xsputn(char const*, long)'
/tmp/ccNzzINg.o:(.rodata._ZTVN9LibSerial15SerialStreamBufE[_ZTVN9LibSerial15SerialStreamBufE]+0x78): not defined reference to `LibSerial::SerialStreamBuf::overflow(int)'

0

Решение

Прежде всего вы определили объект типа SerialStream из пространства имен LibSerial без должного квалификационный Это:

#include "SerialStream.h"#include <iostream>

#define PORT "/dev/ttyUSB0"
SerialStream ardu; // error this type is unqualified

using namespace std;
using namespace LibSerial;

Есть несколько способов квалифицировать тип. Одним из них является размещение определения после используя декларацию из Пространство имен тип определяется в:

#include "SerialStream.h"#include <iostream>

#define PORT "/dev/ttyUSB0"
using namespace std;
using namespace LibSerial;

// qualified by the compiler searching through the
// declared namespaces and finding it in `namespace LibSerial`.

SerialStream ardu;

Другой способ заключается в квалифицировать имя типа явно относится к определенному пространству имен:

LibSerial::SerialStream ardu; // fully qualifies name

Сделав это, ваша вторая проблема заключается в том, что компилятор должен знать, где libserial библиотека находится в файловая система чтобы иметь возможность ссылаться на него.

Предполагая, что вы установили библиотеку в место по умолчанию, этого может быть достаточно:

g++ main.cpp -o ArduCom -lserial

В противном случае вам может потребоваться указать, где библиотека использует ключ -L:

g++ main.cpp -o ArduCom -Wl,-rpath,/path/to/library/folder -L/path/to/library/folder -lserial

libserial библиотека построена с использованием Autotools поэтому, если вы собрали и установили его из исходного кода, он предоставляет инструкции по связыванию как часть устанавливать процесс.

Инструкции примерно такие:

----------------------------------------------------------------------
Libraries have been installed in:
/path/to/libserial/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
1

Другие решения


По вопросам рекламы [email protected]