11

私はライブラリを作成しています。スタティック ライブラリとしてコンパイルすると、正常に動作します。今、私はそれを共有ライブラリに変えたいと思っています。ライブラリは適切な場所に作成されますが、クライアント コードをコンパイルしようとすると、リンク フェーズでライブラリが見つからないと表示されます。

すでに名前を al または dylib に変更しようとしましたが、どちらも役に立ちません。リンクに -v フラグを付けると、ライブラリ パスがそこにあることがわかります。また、さまざまなパスを試しました。相対パスを使用しましたが、フルパスでも見つかりません。

ライブラリの Makefile:

.SUFFIXES:
.SUFFIXES: .o .cpp
.SUFFIXES: .o .d

CC := g++
LNK:= g++

CXXFLAGS_RELEASE    = -fPIC -shared -O2 -Wall -fmessage-length=0
CXXFLAGS_DEBUG      = -fPIC -shared -g -Wall -fmessage-length=0 -D _DEBUG

CXXFLAGS =  $(CXXFLAGS_DEBUG)

OBJDIR:=        obj
SRCDIR:=        src
HDIR:=          include

INCLUDE_PATHS:= -Iinclude -Iinclude/interfaces -Iinclude/support

CPP_FILES := propertyfile/propertyfile.cpp \
            propertyfile/propertyitem.cpp \
            propertyfile/propertyfactory.cpp \
            helper/string_helper.cpp

OBJ :=      $(patsubst %.cpp,$(OBJDIR)/%.o, $(CPP_FILES))
SRC :=      $(patsubst %.cpp,$(SRCDIR)/%.o, $(CPP_FILES))

LIBS:=      

TARGET:=    libsupport.so

all:    $(TARGET)

$(TARGET):  $(OBJ)
    $(LNK) -o $(TARGET) $(OBJ) -shared  
    @cp $(TARGET) ../lib
    @cp -r include ..

clean:
    rm -f $(OBJ) $(ASM) $(TARGET)

-include $(patsubst %.cpp,$(OBJDIR)/%.d, $(CPP_FILES))

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(OBJDIR)/%.d 
    @mkdir -p `dirname $@`
    $(CC) $(CXXFLAGS) -c $< -o $@ $(INCLUDE_PATHS)

$(OBJDIR)/%.d: $(SRCDIR)/%.cpp 
    @mkdir -p `dirname $@`
    $(CC) $(CXXFLAGS) -MM -MT $@ -MF $(OBJDIR)/$*.d -c $< $(INCLUDE_PATHS)

アプリケーションの Makefile は次のとおりです。

.SUFFIXES:
.SUFFIXES: .o .cpp

CC := g++
LD := g++

CXXFLAGS_RELEASE    = -O2 -Wall -fmessage-length=0
CXXFLAGS_DEBUG      = -g -Wall -fmessage-length=0 -D _DEBUG
CXXFLAGS =  $(CXXFLAGS_DEBUG)

OBJDIR:=        obj
SRCDIR:=        src

INCLUDE_PATHS:= -Iinclude -I../include
LIBS:=      -L /cygdrive/d/src/c/lib -lsupport

CPP_FILES := nohupshd.cpp \
            daemon.cpp \
            task.cpp

OBJ :=      $(patsubst %.cpp,$(OBJDIR)/%.o, $(CPP_FILES))
SRC :=      $(patsubst %.cpp,$(SRCDIR)/%.o, $(CPP_FILES))

TARGET:=    nohupshd

all:    $(TARGET)

$(TARGET):  $(OBJ)
    $(LD) -o $(TARGET) $(OBJ) $(LIBS)

clean:
    rm -f $(OBJ) $(ASM) $(TARGET)

-include $(patsubst %.cpp,$(OBJDIR)/%.d, $(CPP_FILES))

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(OBJDIR)/%.d 
    @mkdir -p `dirname $@`
    $(CC) $(CXXFLAGS) -c $< -o $@ $(INCLUDE_PATHS)

$(OBJDIR)/%.d: $(SRCDIR)/%.cpp 
    @mkdir -p `dirname $@`
    $(CC) $(CXXFLAGS) -MM -MT $@ -MF $(OBJDIR)/$*.d -c $< $(INCLUDE_PATHS)
4

1 に答える 1