如果我进入/usr/local/lib
,我会看到一堆文件夹和.dylib
文件,我很确定是动态链接的库文件。如果我去的话,/usr/local/include
它有一堆.h
文件,每个文件都有未编译的纯C源代码。
如果我在放置.h
文件/usr/local/include/mylib.h
,而在本地放置另一个文件.c
或.h
文件~/Desktop/test/foo.c
,则在其中foo.c
可以包含mylib.h
:
~/Desktop/test/foo.c
#include <mylib.h>
int
main() {
puts("Hello World");
return 0;
}
如果我遵循这个,我会在终端中写这个:
$ clang -Xlinker -v
@(#)PROGRAM:ld PROJECT:ld64-351.8
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
Library search paths:
/usr/lib
/usr/local/lib
Framework search paths:
/Library/Frameworks/
/System/Library/Frameworks/
于是/usr/local/lib
就在那里,这是一堆.dylib
文件。我无法修改/usr/lib
。
我的问题是如何获取本地C库(例如)~/Desktop/test/mylib.{c,h}
,并将其集成到其他C库的安装位置,这可能类似于自制软件。
我希望能够使用<尖括号>而不是“引号”来包含库。
所以说我有图书馆mylib.h
和图书馆mylib.c
。
mylib.c
#include "mylib.h"
void
print(char* str) {
puts(str);
}
mylib.h
#include "stdlib.h"
#include "stdio.h"
extern
void
print(char* str);
然后,我将foo.c
其包括在内。
foo.c:
#include <mylib.h>
int
main() {
print("Foo");
return 0;
}
问题是我如何同时使用Clangmylib
和foo.c
Clang进行编译,以便可以#include <mylib.h>
在任何项目中使用尖括号将foo.c
。
我一直在像这样构建它们:
build:
@clang -shared -fpic -O2 \
-install_name mylib.dylib \
-o mylib.dylib \
mylib.c
@clang foo.c build.dylib -o foo
@./foo
.PHONY: build
似乎可行,但是现在的问题是如何以编程方式(不使用XCode)将它们放置到某个合适的位置,以使其通过尖括号进行加载。
如果你坚持:
构建共享库(.dylib
)并将其放入/usr/local/lib
。
将标题复制到/usr/local/include
。
然后,您可以使用以下链接:
gcc -o program source.c function.c -lmylib
并且您将能够编写#include <mylib.h>
您的源代码,并且将找到标头。
另一方面,通常最好使用引号(#include "mylib.h"
)包含项目标头,并且您可以指定在编译器命令行上找到标头和库的目录(-I/some/where/include
标头;-L/some/where/lib
对于库)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句