gpt4 book ai didi

C++,无法从so库访问包含的头文件

转载 作者:行者123 更新时间:2023-11-28 01:32:28 25 4
gpt4 key购买 nike

我尝试在 test.cpp 文件中包含我自己构建的 .so 库。当我尝试制作 test.cpp 文件时,出现此异常:

root@airdrop:/home/pi/naza-interface/examples# make
g++ -c test.cpp
test.cpp:31:35: fatal error: naza_interface_manual.h: No such file or
directory
#include "naza_interface_manual.h"
^
compilation terminated.
Makefile:5: recipe for target 'test.o' failed
make: *** [test.o] Error 1

test.cpp 的 Makefile 如下所示:

output: test.o
g++ -L. -lnazainterface -o test test.o

test.o:
g++ -c test.cpp

clean:
rm -f *.o

test.cpp 只包含库。

#include "naza_interface_manual.h"

该库包含两个文件,naza_interface_manual.hnaza_interface_manual.cpp。该库的 makefile 如下所示:

libso: naza_interface_manual.o pca9685.o
g++ -fPIC -L/usr/local/lib -shared naza_interface_manual.o
pca9685.o -lbcm2835 -o libnazainterface.so

naza_interface_manual.o: src/naza_interface_manual.cpp src/naza_interface_manual.h
g++ -fPIC -c -Wall src/naza_interface_manual.cpp

pca9685.o: src/PCA9685/pca9685.cpp src/PCA9685/pca9685.h
g++ -c src/PCA9685/pca9685.cpp

install: naza_interface_manual.o pca9685.o
g++ -L/usr/local/lib naza_interface_manual.o pca9685.o -lbcm2835 -
shared -o /usr/local/libnazainterface.so

clean:
rm *.o output

naza_interface_manual.h:

#ifndef NAZA_INTERFACE_MANUAL_H_
#define NAZA_INTERFACE_MANUAL_H_


class naza_interface_manual_c{
public:
naza_interface_manual_c();

// A: For roll control (left/right)
// E: For pitch control (front/back)
// T: For throttle control
// R: For rudder control
// U: For Control Model Switch
void configure_pins(int A, int E, int T, int R, int U);

void fly_forward(int speed);
void fly_backward(int speed);
void fly_up(int speed);
void fly_down(int speed);
void fly_left(int speed);
void fly_right(int speed);

};


#endif

naza_interface_manual.cpp:

#include <iostream>
#include <wiringPi.h>
#include <stdio.h>
#include <stdint.h>
#include <unistd.h>

#include "naza_interface_manual.h"
#include "PCA9685/pca9685.h"

naza_interface_manual_c::naza_interface_manual_c(){

std::cout << "Starting Naza Interface";

}

void naza_interface_manual_c::configure_pins(int A, int E, int T, int R, int U){
PCA9685 pca9685;

pca9685.SetFrequency(100);

pca9685.Write(CHANNEL(0), VALUE(350));
}
void naza_interface_manual_c::fly_forward(int speed){

}
void naza_interface_manual_c::fly_backward(int speed){

}
void naza_interface_manual_c::fly_up(int speed){

}
void naza_interface_manual_c::fly_down(int speed){

}
void naza_interface_manual_c::fly_left(int speed){

}
void naza_interface_manual_c::fly_right(int speed){

}

最佳答案

您的 Makefile 没有安装头文件。事实上,它还将共享对象安装在一个非标准位置:/usr/local。您希望库进入 /usr/local/lib 并且您需要在 /usr/local/include 中安装头文件。

您的 Makefile 不符合常规规则:您没有 all 规则,您是直接在安装目录中创建库,而不是调用/usr/bin/install... 如果您想分发它,我建议您查看“正确的”Makefile 布局。用户对您提供的 Makefile 有很多期望;有事实上的标准可以遵循。

如果您想在未安装库的情况下使用它,您需要在test.o: 目标中向编译器提供相关的include 指令;类似于-Ipath/to/your/header

关于C++,无法从so库访问包含的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com