VisualStudio2017でLinuxアプリのリモートデバッグ環境を使用する上で発生した問題とその解決


はじめに

以前作成した記事(VisualStudio2017でLinuxアプリのリモートデバッグ)の環境を使用する上で発生した問題と,その解決をいくつか残しておこうと思います.

コンパイルができない

原因

GNU Cライブラリを更新していなどの原因で,ビルド時に必要なファイルが見つからず,コンパイルエラーとなっていたようです.

解決策

GNU Cライブラリ(libc)関連を更新/インストール,その後再起動を行うことで解決しました.
以下コマンドでパッケージの更新を行うのが一番手っ取り早いと思われます.

sudo apt update
sudo apt upgrade

個別に必要なもののみインストールを行いたい場合は多分以下でいけると思います.(これは過不足あるかもしれないです.)

sudo apt update
sudo apt install libc6-dev
sudo apt install libc6-amd64
sudo apt install libc6-dev-amd64
sudo apt install build-essential

root権限が必要なコードを実行できない

原因

見出しの通りです.
pthreadのFIFOスケジューリングを使用しようとしたとき,root権限が必要となってしまいます.
しかし前回記事の環境で実行すると,root権限で実行することができないため,思うように動作しません.

解決策

わりと強行策ですが,単にssh接続にrootユーザを許可するようにしただけです.

「/etc/ssh/sshd_config」の「PermitRootLogin」を"yes"に変更.
以下コマンドでrootユーザのパスワードを設定

sudo passwd root

VS2017側からssh接続先にrootユーザのものを追加し,以降それを使用するようにする.

静的ライブラリのリンクができない

原因

前回記事に記載した箇所に「-l◯◯」を記載する場合,コンパイルオプショとしてはコンパイル対象のソースコードの記載よりも前に記載されてしまいます.
そのため,mathライブラリなどのコンパイル対象のソースファイルの記載よりもあとにライブラリのリンクオプションを記載しなくてはいけないライブラリのリンクができなくなってしまいます.

解決策

「プロジェクトのプロパティ」→「リンカー」→「すべてのオプション」→「追加の依存ファイル」の後ろに「-l〇〇」を追加することで,コードファイルの記載よりもあとに展開されるため,問題なくコンパイルが行えます.

[参考]
https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/#verbose