0

私のプログラムは、シリアル デバイスと通信する必要があります。Ubuntu 14.04 LTS で開発しています。libserial を見つけて使用しようとしましたが、コンパイルできません。v0.6.0rc2 をダウンロード、コンパイル、インストールしました。ええ、それは rc ですが、sourceforge でより人気があり、安定版リリースは非常に古いものです。より良いライブラリを知っている場合は、コメントで教えてください。

ドキュメントに従って以下に示すコードはコンパイルされません。

#include <SerialStream.h>
//
using namespace LibSerial ;
main()
{
    SerialStream my_serial_stream ;
    //
    // Open the serial port for communication.
    //
    my_serial_stream.Open( "/dev/ttyS0" ) ;

}

これは私が得るエラーです:

dalton@dalton-SVF14212SNW:~$ g++ test.cpp
/tmp/ccyWIbXN.o: In function `main':
test.cpp:(.text+0x17): undefined reference to `LibSerial::SerialStream::SerialStream()'
test.cpp:(.text+0x6d): undefined reference to `LibSerial::SerialStream::Open(std::string, std::_Ios_Openmode)'
test.cpp:(.text+0x9a): undefined reference to `LibSerial::SerialStream::~SerialStream()'
test.cpp:(.text+0xd6): undefined reference to `LibSerial::SerialStream::~SerialStream()'
collect2: error: ld returned 1 exit status

問題の行をに変更し、my_serial_stream.Open( "/dev/ttyS0" , ios::out ) ;namespace を追加しましstdた。今、私はこのエラーを受け取ります:

dalton@dalton-SVF14212SNW:~$ g++ test.cpp
/tmp/ccUhSQVA.o: In function `main':
test.cpp:(.text+0x17): undefined reference to `LibSerial::SerialStream::SerialStream()'
test.cpp:(.text+0x5f): undefined reference to `LibSerial::SerialStream::Open(std::string, std::_Ios_Openmode)'
test.cpp:(.text+0x8c): undefined reference to `LibSerial::SerialStream::~SerialStream()'
test.cpp:(.text+0xc8): undefined reference to `LibSerial::SerialStream::~SerialStream()'
collect2: error: ld returned 1 exit status
4

1 に答える 1

1

ライブラリをコードにリンクする必要があります。

使ってみて

g++ test.cpp -L<PATH_TO_LIB_SERIAL_LIBRARY_DIR> -lserial

libserial を /usr/local/lib にインストールしたと仮定します (libserial.a または libserial.so は /usr/local/lib にあります)。次のコマンドを使用して、プログラムをコンパイルおよびリンクします。

g++ test.cpp -L/usr/local/lib -lserial

投稿したエラー出力は、リンク段階でエラーが発生したことを示しています。

未定義の参照/未解決の外部シンボル エラーとは何か、およびその修正方法を参照してください。

リンク エラーの原因の詳細については、

この場合、ライブラリにリンクしていないようです。

于 2015-07-13T18:20:03.920 に答える