Search code examples
c++makefilelib.a

Custom Static Library (.a lib) not found when building MakeFile for C++ Linux project


I have a custom library I made called AceLibraryLinux and I'm trying to use it in a C++ Linux program I made called RumPi (Raspberry Pi application I'm making). The .a file is called "AceLibraryLinux.a" however, the make file is not finding the lib. I tried specifying the path with -L and modifying the make build command but I havent been able to get it working. Here is a screenshot of the directory structure directory structure screenshot

And this is what the MakeFile currently looks like. LDFlags was not there originally, I tried adding it in an attempt to fix the issue so it is most likely incorrect:

CXX = g++
CXXFLAGS = -std=c++11
LDLIBS = -lwiringPi -lpthread -li2c -lAceLibraryLinux
LDFLAGS = -L. -lAceLibraryLinux -static

HEADERS = ./AceLinux.h ./Common.h Components/Headers/RumPi.h Components/Headers/Component.h Components/Headers/AnalogDigitalConverterComponent.h Components/Headers/Vehicle.h Components/Headers/Motor.h Components/Headers/Receiver.h Components/Headers/DualLED.h Components/Headers/LED.h Components/Headers/RGBLED.h Components/Headers/Relay.h Components/Headers/LCD1602.h Components/Headers/PCF8591.h Components/Headers/GasData.h Components/Headers/GasSensor.h Components/Headers/RotaryEncoder.h Components/Headers/HumiditySensor.h Components/Headers/SoundSensor.h Components/Headers/BMP180.h Components/Headers/BMP280.h Components/Headers/HCSR501.h Components/Headers/PiCamera.h Components/Headers/MCP3008.h
OBJECTS = RumPi.o Vehicle.o Motor.o Receiver.o DualLED.o LED.o RGBLED.o Relay.o LCD1602.o PCF8591.o GasData.o GasSensor.o RotaryEncoder.o HumiditySensor.o SoundSensor.o BMP180.o BMP280.o HCSR501.o PiCamera.o MCP3008.o

default: RumPi

RumPi: $(OBJECTS)
    $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@

%.o: Components/Implementations/%.cpp
    $(CXX) $(CXXFLAGS) -c -o $@ $<

$(OBJECTS): $(HEADERS)

clean:
    -rm -f $(OBJECTS)
    -rm -f RumPi

Solution

  • Thanks again, as the commenters pointed out, the name on LDLIBS needed to be changed to "AceLibraryLinux.a" and I removed the LDFLAGS line since it was not necessary or being used. Here is the fixed make file:

    CXX = g++
    CXXFLAGS = -std=c++11
    LDLIBS = -lwiringPi -lpthread -li2c AceLibraryLinux.a
    
    HEADERS = ./AceLinux.h ./Common.h Components/Headers/RumPi.h Components/Headers/Component.h Components/Headers/AnalogDigitalConverterComponent.h Components/Headers/Vehicle.h Components/Headers/Motor.h Components/Headers/Receiver.h Components/Headers/DualLED.h Components/Headers/LED.h Components/Headers/RGBLED.h Components/Headers/Relay.h Components/Headers/LCD1602.h Components/Headers/PCF8591.h Components/Headers/GasData.h Components/Headers/GasSensor.h Components/Headers/RotaryEncoder.h Components/Headers/HumiditySensor.h Components/Headers/SoundSensor.h Components/Headers/BMP180.h Components/Headers/BMP280.h Components/Headers/HCSR501.h Components/Headers/PiCamera.h Components/Headers/MCP3008.h
    OBJECTS = RumPi.o Vehicle.o Motor.o Receiver.o DualLED.o LED.o RGBLED.o Relay.o LCD1602.o PCF8591.o GasData.o GasSensor.o RotaryEncoder.o HumiditySensor.o SoundSensor.o BMP180.o BMP280.o HCSR501.o PiCamera.o MCP3008.o
    
    default: RumPi
    
    RumPi: $(OBJECTS)
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
    
    %.o: Components/Implementations/%.cpp
        $(CXX) $(CXXFLAGS) -c -o $@ $<
    
    $(OBJECTS): $(HEADERS)
    
    clean:
        -rm -f $(OBJECTS)
        -rm -f RumPi