Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将静态库(.a)添加到C++;节目? 我想知道如何使用C++中的静态库,我首先创建了LIB: // header: foo.h int foo(int a);_C++_Linker - Fatal编程技术网

如何将静态库(.a)添加到C++;节目? 我想知道如何使用C++中的静态库,我首先创建了LIB: // header: foo.h int foo(int a);

如何将静态库(.a)添加到C++;节目? 我想知道如何使用C++中的静态库,我首先创建了LIB: // header: foo.h int foo(int a);,c++,linker,C++,Linker,然后我首先编译库: g++foo.cpp ar rc libfoo.a foo.o 现在我想在一些文件中使用这些库,如: // prog.cpp #include "foo.h" int main() { int i = foo(2); return i; } 我现在必须如何编译这些文件? 我提出: 但由于找不到所需的函数foo,因此出现错误: g++ -L. prog.cpp -lfoo 不幸的是,ld链接器对库的顺序很敏感。当尝试满足prog.cp

然后我首先编译库:

  • g++foo.cpp
  • ar rc libfoo.a foo.o
  • 现在我想在一些文件中使用这些库,如:

    // prog.cpp
    #include "foo.h"
    int main()
    { 
        int i = foo(2);
        return i;
    }
    
    我现在必须如何编译这些文件? 我提出:

    但由于找不到所需的函数foo,因此出现错误:

    g++ -L.  prog.cpp -lfoo
    
    不幸的是,ld链接器对库的顺序很敏感。当尝试满足prog.cpp中未定义的符号时,它将只查看命令行上出现在prog.cpp之后的库

    您也可以在命令行上指定库(必要时使用路径),而不必考虑-L标志:

    g++ prog.cpp libfoo.a
    

    g++-L.-lfoo prog.cpp libfoo.a
    IIRC@sehe:-lfoo大致相当于在命令行上列出libfoo.a。顺序确实很重要。好的,如果询问者想知道原因,可以用非常简洁的术语解释链接器顺序是从左到右的。(啊,在我添加了这个评论之后,回答者添加了一些补充信息)。
    g++ -L.  prog.cpp -lfoo
    
    g++ prog.cpp libfoo.a