История изменений
Исправление EXL, (текущая версия) :
Следи за руками:
$ cat 1/a.cpp
#include <iostream>
void hello_1(void) {
std::cout << "Hello 1" << std::endl;
}
$ cat 2/a.cpp
#include <iostream>
void hello_2(void) {
std::cout << "Hello 2" << std::endl;
}
$ cat b.cpp
#include "1/a.h"
#include "2/a.h"
int main(void) {
hello_1();
hello_2();
return 0;
}
----------------------------
$ g++ -c 1/a.cpp -o 1/a.o
$ g++ -c 2/a.cpp -o 2/a.o
# First
$ ar rcs lib.a 1/a.o
$ ar rcs lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
b.cpp:(.text+0x9) undefined reference to hello_1()
$ rm lib.a
# Second
$ ar rcsP lib.a 1/a.o
$ ar rcsP lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
# Third
$ ar rcs lib.a 1/a.o 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
Исправление EXL, :
Следи за руками:
$ cat 1/a.cpp
#include <iostream>
void hello_1(void) {
std::cout << "Hello 1" << std::endl;
}
$ cat 2/a.cpp
#include <iostream>
void hello_2(void) {
std::cout << "Hello 2" << std::endl;
}
$ cat b.cpp
#include "1/a.h"
#include "2/a.h"
int main(void) {
hello_1();
hello_2();
return 0;
}
----------------------------
$ g++ -c 1/a.cpp -o 1/a.o
$ g++ -c 2/a.cpp -o 2/a.o
# First
$ ar rcs lib.a 1/a.o
$ ar rcs lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
# /usr/bin/ld: /tmp/ccbufrnT.o: in function `main':
# b.cpp:(.text+0x9): undefined reference to `hello_1'()
# collect2: error: ld returned 1 exit status
$ rm lib.a
# Second
$ ar rcsP lib.a 1/a.o
$ ar rcsP lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
# Third
$ ar rcs lib.a 1/a.o 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
Исправление EXL, :
Следи за руками:
$ cat 1/a.cpp
#include <iostream>
void hello_1(void) {
std::cout << "Hello 1" << std::endl;
}
$ cat 2/a.cpp
#include <iostream>
void hello_2(void) {
std::cout << "Hello 2" << std::endl;
}
$ cat b.cpp
#include "1/a.h"
#include "2/a.h"
int main(void) {
hello_1();
hello_2();
return 0;
}
----------------------------
$ g++ -c 1/a.cpp -o 1/a.o
$ g++ -c 2/a.cpp -o 2/a.o
# First
$ ar rcs lib.a 1/a.o
$ ar rcs lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
/usr/bin/ld: /tmp/ccbufrnT.o: in function main:
b.cpp:(.text+0x9): undefined reference to hello_1()
collect2: error: ld returned 1 exit status
$ rm lib.a
# Second
$ ar rcsP lib.a 1/a.o
$ ar rcsP lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
# Third
$ ar rcs lib.a 1/a.o 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
Исправление EXL, :
Следи за руками:
$ cat 1/a.cpp
#include <iostream>
void hello_1(void) {
std::cout << "Hello 1" << std::endl;
}
$ cat 2/a.cpp
#include <iostream>
void hello_2(void) {
std::cout << "Hello 2" << std::endl;
}
$ cat b.cpp
#include "1/a.h"
#include "2/a.h"
int main(void) {
hello_1();
hello_2();
return 0;
}
----------------------------
$ g++ -c 1/a.cpp -o 1/a.o
$ g++ -c 2/a.cpp -o 2/a.o
# First
$ ar rcs lib.a 1/a.o
$ ar rcs lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
/usr/bin/ld: /tmp/ccbufrnT.o: in function `main':
b.cpp:(.text+0x9): undefined reference to `hello_1()'
collect2: error: ld returned 1 exit status
$ rm lib.a
# Second
$ ar rcsP lib.a 1/a.o
$ ar rcsP lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
# Third
$ ar rcs lib.a 1/a.o 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
Исходная версия EXL, :
Следи за руками:
$ cat 1/a.cpp
#include <iostream>
void hello_1(void) {
std::cout << "Hello 1" << std::endl;
}
$ cat 2/a.cpp
#include <iostream>
void hello_2(void) {
std::cout << "Hello 2" << std::endl;
}
$ cat b.cpp
#include "1/a.h"
#include "2/a.h"
int main(void) {
hello_1();
hello_2();
return 0;
}
----------------------------
$ g++ -c 1/a.cpp -o 1/a.o
$ g++ -c 2/a.cpp -o 2/a.o
# First
$ ar rcs lib.a 1/a.o
$ ar rcs lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
/usr/bin/ld: /tmp/ccbufrnT.o: in function `main':
b.cpp:(.text+0x9): undefined reference to `hello_1()'
collect2: error: ld returned 1 exit status
$ rm lib.a
# Second
$ ar rcsP lib.a 1/a.o
$ ar rcsP lib.a 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a
# Third
$ ar rcs lib.a 1/a.o 2/a.o
$ nm lib.a | c++filt | grep "T hello"
0000000000000000 T hello_1()
0000000000000000 T hello_2()
$ g++ b.cpp lib.a -o b
$ ./b
Hello 1
Hello 2
$ rm lib.a