AI-Thinker ESP32-CAM NetworkClientSecure Compile error

Board: ESP32-CAM
esp32 library: 3.2.0
OS: Mac
Arduino IDE: 2.3.5

Hello, I'm getting the following error when trying to compile a sketch with multiple files. I can't figure out what the error is.

Compiling libraries...
Compiling library "NetworkClientSecure"
/Users/lucas/Library/Arduino15/packages/esp32/tools/esp-x32/2411/bin/xtensa-esp32-elf-g++ -MMD -c @/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/flags/cpp_flags -w -Os -Werror=return-type -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ESP32_DEV\"" "-DARDUINO_VARIANT=\"esp32\"" -DARDUINO_PARTITION_huge_app "-DARDUINO_HOST_OS=\"macosx\"" "-DARDUINO_FQBN=\"esp32:esp32:esp32cam:CPUFreq=240,FlashFreq=80,FlashMode=qio,PartitionScheme=huge_app,DebugLevel=none,EraseFlash=none\"" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -DARDUINO_USB_CDC_ON_BOOT=0 @/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/flags/defines -I/Users/lucas/arduino/greenhouse/esp32-cam -iprefix /Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/include/ @/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/flags/includes -I/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/qio_qspi/include -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/cores/esp32 -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/variants/esp32 -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/Network/src -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/HTTPClient/src -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/WiFi/src @/Users/lucas/Library/Caches/arduino/sketches/465026865CBDCA2F4E8AC5E1D7208529/build_opt.h @/Users/lucas/Library/Caches/arduino/sketches/465026865CBDCA2F4E8AC5E1D7208529/file_opts /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src/NetworkClientSecure.cpp -o /Users/lucas/Library/Caches/arduino/sketches/465026865CBDCA2F4E8AC5E1D7208529/libraries/NetworkClientSecure/NetworkClientSecure.cpp.o
/Users/lucas/Library/Arduino15/packages/esp32/tools/esp-x32/2411/bin/xtensa-esp32-elf-g++ -MMD -c @/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/flags/cpp_flags -w -Os -Werror=return-type -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ESP32_DEV\"" "-DARDUINO_VARIANT=\"esp32\"" -DARDUINO_PARTITION_huge_app "-DARDUINO_HOST_OS=\"macosx\"" "-DARDUINO_FQBN=\"esp32:esp32:esp32cam:CPUFreq=240,FlashFreq=80,FlashMode=qio,PartitionScheme=huge_app,DebugLevel=none,EraseFlash=none\"" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -DARDUINO_USB_CDC_ON_BOOT=0 @/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/flags/defines -I/Users/lucas/arduino/greenhouse/esp32-cam -iprefix /Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/include/ @/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/flags/includes -I/Users/lucas/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.4-2f7dcd86-v1/esp32/qio_qspi/include -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/cores/esp32 -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/variants/esp32 -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/Network/src -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/HTTPClient/src -I/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/WiFi/src @/Users/lucas/Library/Caches/arduino/sketches/465026865CBDCA2F4E8AC5E1D7208529/build_opt.h @/Users/lucas/Library/Caches/arduino/sketches/465026865CBDCA2F4E8AC5E1D7208529/file_opts /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src/ssl_client.cpp -o /Users/lucas/Library/Caches/arduino/sketches/465026865CBDCA2F4E8AC5E1D7208529/libraries/NetworkClientSecure/ssl_client.cpp.o
In file included from /Users/lucas/arduino/greenhouse/esp32-cam/google_photos.h:4,
                 from /Users/lucas/arduino/greenhouse/esp32-cam/camera.h:6,
                 from /Users/lucas/arduino/greenhouse/esp32-cam/Server.h:5,
                 from /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/Network/src/NetworkServer.h:22,
                 from /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/Network/src/Network.h:13,
                 from /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src/NetworkClientSecure.h:25,
                 from /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src/NetworkClientSecure.cpp:21:
/Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure/src/WiFiClientSecure.h:3:9: error: 'NetworkClientSecure' does not name a type; did you mean 'NetworkClientSecure_h'?
    3 | typedef NetworkClientSecure WiFiClientSecure;
      |         ^~~~~~~~~~~~~~~~~~~
      |         NetworkClientSecure_h
Multiple libraries were found for "WiFi.h"
  Used: /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/WiFi
  Not used: /Users/lucas/Documents/Arduino/libraries/WiFiNINA
Using library NetworkClientSecure at version 3.2.0 in folder: /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/NetworkClientSecure 
Using library Networking at version 3.2.0 in folder: /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/Network 
Using library HTTPClient at version 3.2.0 in folder: /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/HTTPClient 
Using library WiFi at version 3.2.0 in folder: /Users/lucas/Library/Arduino15/packages/esp32/hardware/esp32/3.2.0/libraries/WiFi 
exit status 1

Here is my code:

// server.h
#ifndef SERVER_H
#define SERVER_H

#include "esp_http_server.h"
#include "camera.h"
#include "logging.h"

void start_server();

#endif
// camera.h
#ifndef CAMERA_H
#define CAMERA_H

#include "esp_camera.h"
#include "logging.h"
#include "google_photos.h"

esp_err_t camera_init();
void dailyCapture();

#endif
// google_photos.h

#ifndef GOOGLE_PHOTOS_H
#define GOOGLE_PHOTOS_H

#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include "logging.h"

String getGoogleAccessToken();
bool uploadToGooglePhotos(camera_fb_t *fb, const String &filename);
bool createGooglePhotosMediaItem(const String &accessToken, const String &uploadToken, const String &filename);

#endif
// esp32-cam.ino

#include "camera.h"
#include "server.h"
#include "google_photos.h"
#include "wifi_setup.h"
#include "time_sync.h"

const int captureHour = 6;   // Hour when daily capture occurs
const int captureMinute = 0; // Minute when daily capture occurs
int lastCaptureDay = -1;      // To ensure one capture per day

void setup() {
    Serial.begin(115200);
    log("Serial started");

    // Connect to WiFi
    connectToWiFi("QF-Dachman", "Goldfish1");

    // Synchronize time using NTP
    synchronizeTime();

    // Initialize the camera
    if (camera_init() != ESP_OK) {
        log("Camera init failed. Halting.");
        while (true) {
            delay(1000);
        }
    }

    // Start the HTTP server
    start_server();
}

void loop() {
    // Check current time every second for daily capture
    struct tm timeinfo;
    if (getLocalTime(&timeinfo)) {
        if (timeinfo.tm_hour == captureHour && timeinfo.tm_min == captureMinute && (lastCaptureDay != timeinfo.tm_mday)) {
            dailyCapture();
            lastCaptureDay = timeinfo.tm_mday; // Mark capture done for today
        }
    } else {
        log("Failed to get local time");
    }
    delay(1000); // Check once every second
}

One of your libraries has an error. There are a few things you can do.

  1. Report it on their github site as an issue and wait for them to fix it.
  2. Try an older version of the library causing the problem. NOTE: This is a board level library so roll back the esp32 board from 3.2.0 to something earlier.
  3. Fork the library with the bug and fix it yourself then (I am not github trained) do whatever neds to be done so you can move on.

This part is read from the bottom, up. A few lines above, it's compiling a library, "NetworkClientSecure", which unsurprisingly contains a source file named -- on the last from line -- NetworkClientSecure.cpp. Note the paths: Arduino15/packages/esp32/hardware: part of the board's core platform. Four of those in the chain of includes.

But the fifth one up switches to Server.h in your sketch, and then continues from there: camera.h, google_photos.h. What should have happened instead is that NetworkServer.h includes Arduino15/packages/esp32/hardware/esp32/3.2.0/cores/esp32/Server.h. But the one in your sketch erroneously was matched first.

Also note that on Mac, the file system is (by default) case-preserving, but not case-sensitive, so your server.h matched as Server.h

TL;DR: rename your server.h to something else.

I was able to solve this by rearranging my imports