【问题标题】:C++ Linking to .so file within makefileC ++链接到makefile中的.so文件
【发布时间】:2016-05-24 15:18:25
【问题描述】:

我正在尝试从 makefile 链接到 .so 库文件。我的项目中有三个文件:main.cpp、shm.h 和 shm.cpp。 main.cpp 包括 shm 类。此外,shm 类依赖于存储在 alcommon 库 (libalcommon.so) 中的几个头文件。

我的makefile目前是这样写的。我的想法是 .so 文件应该是 shm.o 的依赖项,因此应该包含在内。

Variables
CXXFLAGS=-Wall -g
CXX = g++

#Executable
#TransformTests: TransformTests.o Transform.o
#       $(CXX) $(CXXFLAGS) -o TransformTests TransformTests.o Transform.o

#Dynamics Library Creation


#Object Targets
main.o: main.cpp shm.h
        #(CXX) $(CXXFLAGS) -c main.cpp

shm.o: shm.cpp shm.h -L../../naoqi-sdk-2.1.3.3-linux32/lib -lalcommon
        $(CXX) $(CXXFLAGS) -c shm.cpp

clean:
        rm -f *o main
        rm -f *o shm

all: shm main

【问题讨论】:

    标签: c++ makefile linker shared-libraries .so


    【解决方案1】:

    您需要将程序本身作为目标,这就是.so 出现的地方(在链接期间,而不是编译期间)。像这样的:

    Variables
    CXXFLAGS=-Wall -g
    CXX = g++
    
    #Executable
    #TransformTests: TransformTests.o Transform.o
    #       $(CXX) $(CXXFLAGS) -o TransformTests TransformTests.o Transform.o
    
    #Dynamics Library Creation
    
    
    #Object Targets
    main.o: main.cpp shm.h
            $(CXX) $(CXXFLAGS) -c main.cpp
    
    shm.o: shm.cpp shm.h
            $(CXX) $(CXXFLAGS) -c shm.cpp
    
    myprog: shm.o main.o 
            $(CXX) $(CXXFLAGS) -o myprog shm.o main.o -L ../../naoqi-sdk-2.1.3.3-linux32/lib -lalcommon
    
    clean:
            rm -f *o main
            rm -f *o shm
    
    all: shm main
    

    【讨论】:

    • 你可能喜欢自动生成头依赖,否则容易出错。
    • 好的。我如何避免包含 .so 库中的头文件这一事实?
    • 你不需要绕过它。只要它们在编译期间对编译器可见(必要时使用相关的-I 开关),它就可以工作。
    • 这是有道理的。你能解释一下我如何使用 -I 开关,因为我没有 .h 文件吗?如果这些是微不足道的问题,我深表歉意 - 我对 makefile 不太满意。
    • 实际上,我找到了一个有助于解释这一点的链接 - stackoverflow.com/questions/1176427/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2017-12-20
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多