【问题标题】:Simple installation from source on Linux在 Linux 上从源代码简单安装
【发布时间】:2016-04-13 21:16:37
【问题描述】:

我正在尝试找出一种安装 C 和 C++ 代码的简化方法 以及由它们构建的库,主要用于 Linux。我认为 GNU Autotools、CMake 等对于我正在尝试做的事情来说太过分了。

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

使用 Autotools,可以运行“make install”或“sudo make install”来 将 example.a 复制到 /usr/local/lib 并将包含文件复制到 /usr/local/include。 如果已构建可执行文件,它们将被复制到 /usr/local/bin。

我已尝试将以下几行添加到我的 makefile:

安装:
cp example.a /usr/local/lib
cp example1.h /usr/local/include
cp example2.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:是否有安装包含/库的“标准”方式 只是当前用户,而不是为所有用户这样做? (因此避免 需要root用户,我认为这将是一个“更清洁”的系统,只要 使用该程序的用户必须处理这些文件。)

【问题讨论】:

    标签: c++ c linux installation


    【解决方案1】:

    您可能应该使用install 以显式权限进行复制。 example.a 可能找不到,因为它不是以 lib 开头的(我知道这是一个愚蠢的要求)。

    将您的libincludebin 放在$HOME/.local 下可能是最接近每用户标准设置的方法。

    编辑:

    我刚刚对其进行了测试,/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
    

    在不同的目录中:

    ma​​in.c

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

    编译、链接和运行:

    gcc main.c -lfoo 
    ./a.out
    

    【讨论】:

    • 谢谢。没听说过“安装”,但“手动安装”让我加快了速度。重命名为“libexample.a”没有帮助;我会继续调查。您对每个用户设置的建议似乎是合理的,尽管我确实觉得奇怪的是没有更“标准”的方式来做到这一点......我肯定不是第一个遇到这种情况的人吗?
    • 啊,我知道我在哪里搞砸了('man ld' 并查看 -l 选项证实了这一点):文件必须命名为 'libfoo.a'。然后可以使用“-lfoo”之一,ld 将在前面添加 lib,在其后添加 .a。 或者你可以使用'-l:libfoo.a',它会按字面意思对待它。再次感谢;这真是莫名其妙......
    • 不错。我不知道:。太糟糕了,我似乎无法让它在我可以真正使用它的共享库中工作(仅适用于静态库)。
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2015-09-14
    • 1970-01-01
    • 2021-06-30
    • 2012-05-30
    相关资源
    最近更新 更多