@hayashi000

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ラズパイpico wをMacのVSCodeでCMakeで開発しているのですが、ヘッダファイル内でincludeエラーが出てしまいます

解決したいこと

ラズパイpico wをMacのVSCodeでCMakeで開発しています。
Cのコード内でエラーは表示されないのですが、ヘッダファイル(opt.h)内でincludeエラーが出てしまいます。
エラーを消してビルドし、uf2ファイルを作成したいです。
どなたかご教示いただければ幸いです。

発生している問題・エラー

lwipopts.h: No such file or directory

該当するソースコード

#include "lwipopts.h"

opt.hのパスは以下のとおりです。
Users/UserName/pico/pico-sdk/lib/lwip/src/include/lwip/opt.h

CMakeList

cmake_minimum_required(VERSION 3.13)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
# Set the path to your Pico SDK installation directory
#set(PICO_SDK_PATH "/Users/reiya/pico/pico-sdk" CACHE PATH "Path to the Pico SDK")

set(PICO_BOARD pico_w)

include(pico_sdk_import.cmake)

project(tcp_client_pico_w C CXX ASM)

# Initialize the Pico SDK
pico_sdk_init()

# Add executable
add_executable(tcp_client
    tcp_client.c
)

# Include directories
target_include_directories(tcp_client PRIVATE ${CMAKE_CURRENT_LIST_DIR})

# Link libraries
target_link_libraries(tcp_client
    pico_stdlib
    pico_cyw43_arch_lwip_threadsafe_background
    lwip/sockets
)

# Enable USB output, disable UART output
pico_enable_stdio_usb(tcp_client 1)
pico_enable_stdio_uart(tcp_client 0)

# Create map/bin/hex file etc.
pico_add_extra_outputs(tcp_client)

自分で試したこと

プロジェクトの中にはCのコードは一つであり、CMakeListも同じ階層にあります。

teratailの質問で同じような内容を見つけたのですが、そちらはwindowsだったため、Macでの解決策はわかりませんでした。
https://teratail.com/questions/243670

0 likes

2Answer

Comments

  1. lwipiots.h は、ユーザーが(プロジェクトごとに)lwIPの様々な設定をコンフィグレーションするためのユーザーファイルらしいです。つまり、lwIPの様々なコンパイルオプションに対して、適宜、目的に合わせて、必要なものだけ、自分で自由に定義を書けばよいのだと思います。で、先にご案内したStack Overflowの回答では、(回答者のフレームワークでは)新しいプロジェクトを作る際にデフォルトのものが自動作成されるそうなので、そのあたりの経緯をお尋ねした次第です。そういう仕組みは使っていないということであれば、前述のとおり自分で必要な定義を書いた lwipiots.h を用意してプロジェクトに追加すれば良いのではないでしょうか。

    内容の例がここにあります。
    https://github.com/raspberrypi/pico-project-generator/blob/master/lwipopts.h

    lwipiots.h で定義しなければデフォルトの設定になる(逆に言えば、lwipiots.h での定義はデフォルトの定義を上書きするためのものである)ようなので、すべてデフォルトで良いなら、空の lwipiots.h を作っておけば、それでも良いのだと思います。

  2. @hayashi000

    Questioner

    お返事が遅くなり申し訳ありません。
    大変丁寧な返信ありがとうございます。
    lwipopts.hの自動作成はされていなかったので、自分で作ってみようと思います。

自分のMacの環境(pico-sdk 1.5.1)だと、以下のパスにあります。

pico-sdk/lib/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h

pico-sdkのバージョンはいくつですか?

0Like

Comments

  1. コンパイラは何を使われますか?
    VSCodeで選択肢したコンパイラ(GCCの種類)を教えてください。

  2. @hayashi000

    Questioner

    返信が遅れました。
    pico-sdkのバージョンは1.5.1です。
    GCCはGCC14.1.0 arm-none-eabi です。

  3. 随分経っていて、その時に調べたことをすっかり忘れてしまいました。すみません。

    以下のコマンドをターミナルで実行して、lwipopts.hの所在を調べて、そのヘッダーファイルを自身のプロジェクトにコピーしてしまう、安直な方法でどうでしょうか。

    cd $PICO_SDK_PATH
    find . -name "lwipopts.h"
    

    自分の環境で実行すると、複数のファイルが見つかり、そのサイズはバラバラでした。
    サイズの大きいファイルを使えばよいと思います。(コンパイルでエラーがでなければ、どれでもよい。)

    $ cd $PICO_SDK_PATH
    $ find . -name "lwipopts.h" -exec wc {} \;
          13      36     392 ./test/kitchen_sink/lwipopts.h
          90     474    3870 ./lib/lwip/test/unit/lwipopts.h
          84     430    3461 ./lib/lwip/test/fuzz/lwipopts.h
         326    1409   11621 ./lib/lwip/contrib/examples/example_app/lwipopts.h
         436    1480   12156 ./lib/lwip/contrib/ports/unix/lib/lwipopts.h
         238     898    6651 ./lib/btstack/platform/lwip/port/lwipopts.h
          71     373    2984 ./lib/tinyusb/test/fuzz/device/net/src/lwipopts.h
          71     373    2984 ./lib/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h
    
  4. @hayashi000

    Questioner

    ありがとうございます。やってみます!

Your answer might help someone💌