【发布时间】:2012-02-20 11:06:34
【问题描述】:
在源文件(来自共享对象/DLL)中,我得到OKAY could not be resolved,尽管它在标题中。标头在另一个项目中,但我认为这不应该相关,因为 ppackage 已正确解析?
更新,这里是来源:
- foor.c a/k/a 来源:https://github.com/linuxrocksrulers/m5/blob/ec4f62ba1c/foor/src/foor.c#L19
- m5.h a/k/a 标头:https://github.com/linuxrocksrulers/m5/blob/ec4f62ba1c/m5/src/include/m5.h#L34
构建项目的输出。
make all
Building file: ../src/foor.c
Invoking: GCC C Compiler
gcc -I"/home/lk/proj/m5/m5/src/include" -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/foor.d" -MT"src/foor.d" -o "src/foor.o" "../src/foor.c"
In file included from ../src/foor.c:9:0:
/home/lk/proj/m5/m5/src/include/m5.h:33:3: warning: #warning ohshit
../src/foor.c:12:1: warning: missing braces around initializer
../src/foor.c:12:1: warning: (near initialization for 'fs[1]')
Finished building: ../src/foor.c
Building target: libfoor.so
Invoking: GCC C Linker
gcc -shared -o "libfoor.so" ./src/foor.o
Finished building target: libfoor.so
标题:
#include <stdio.h>
enum {
OKAY = 0,
ERR,
ERRANY,
// list shortened
ERRNOTFOUND,
};
typedef struct { ..foobars.. } ppackage;
源文件:
#include <header.h> // Did add -I ../include, where the header is
ppackage knock(ppackage *in)
{
return OKAY; // ERROR
}
【问题讨论】:
-
你应该使用
#include ""而不是#include <>作为你自己的头文件并保留<>作为系统文件 -
然后我将不得不创建链接,这是非常不便携甚至更脏的,因为我有很多项目。但是是的,它应该是。除了这是跨项目标题。奇怪的是,没有共享库/DLL 的主程序可以工作(可以使用
OKAY和所有东西),与此处显示的源文件相反,它只能使用结构...... -
根据你上传到github的目录结构,你应该使用
-I include而不是-I ../include,因为源文件和include目录在同一个目录。 -
@ChrisBrowne 我简化了它。 ppackage 仍然可以在 foor 中使用,并且我在标题上没有收到错误。实际包含是正确的。但我还是不明白。
-
我在您的编译器输出中看不到错误。我所看到的只是一个警告,您告诉编译器在某一行生成。宏 OKAY 没有任何内容。
标签: c dll enums header shared-libraries