2016-04-13 44 views
0

我想弄清楚安装C和C++代码的简化方法 以及由它们构建的库,主要用于Linux。我想认为 GNU Autotools,CMake等对于我正在尝试做的事情来说是过分的。从Linux上简单安装源代码

一个例子:我写了一些代码,当'make'运行时,建立到 创建一个库'example.a'。 (我将使用静态链接到目前为止 共享库将引入更多的问题;在我走之前我会抓取它。)使用这些函数需要包括'example1.h','example2.h'等。

使用Autotools,可以运行'make install'或'sudo make install'至 将example.a复制到/ usr/local/lib,并将包含文件复制到/ usr/local/include。 如果构建了可执行文件,则会将其复制到/ usr/local/bin。

我尝试添加以下行到我的生成文件:

安装:
CP example.a在/ usr/local/lib目录
CP example1.h在/ usr /本地/包括
CP例题.h/usr/local/include
cp示例/ usr/local/bin

这似乎很有效,主要是。其他项目则可以“看” .h文件并正确构建。但.a文件未找到;唯一可以链接的 的方法是明确指定路径为 /usr/local/lib/example.a。 (尽管gcc坚持认为它在那条路径上寻找库 )。所以:

问题1:我的用户构建的库应该放在/ usr/local/lib中吗?还是我 我使用错误的目录?

现在,我的下一个问题是:这必须用'sudo make install'来完成。 我在考虑对于这个类似的项目,其中只有一个用户将 利用有问题的代码,库应该去 ,如$ HOME/lib,包括文件到$ HOME/include,可执行文件到 $ HOME/bin。

问题2:是否有一种“标准”方式为当前用户安装 包括/库,而不是为所有用户安装? (从而避免 根使用的需要,我认为这将是一个“干净”的系统,如果只使用 该程序的用户不得不处理这些文件。)

回答

1

你应该使用install复制具有明确的权限。 example.a可能没有找到,因为它不以lib开头(我知道一个愚蠢的要求)。

把你libincludebin$HOME/。当地可能是最接近每个用户的标准设置。

编辑:

我只是测试它,它/usr/local/lib为我工作得很好:

foo.c的

#include <stdio.h> 
void foo() { puts("foo"); } 

编译并安装:

gcc -c foo.c 
ar crs libfoo.a foo.o 
install -m 0755 /usr/local/lib #0644 should do too 

在不同的目录:

的main.c

void foo(void); 
int main() { foo(); return 0; } 

编译,链接,并运行:

gcc main.c -lfoo 
./a.out 
+0

谢谢。没有听说过“安装”,但“安装人员”让我加快速度。重命名为'libexample.a'没有帮助;我会继续调查。你对每个用户设置的建议似乎是合理的,尽管我觉得奇怪的是没有一个更“标准”的方法来做到这一点......当然,我不是第一个遇到这种情况? –

+0

/usr/local/lib适合我。我添加了一个例子。 – PSkocik

+1

啊,我看到我疯狂的地方(和'man ld',看着-l选项证实了这一点):该文件必须命名为'libfoo.a'。然后可以使用'-lfoo',ld将在前面加上lib,后面加上.a。 _或者你可以使用'-l:libfoo.a',它会直接处理它。再次感谢;这是相当莫名其妙的... –