1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
...
Machine Dependent Options
...
HPPA Options
...
-threads
Add support
for
multithreading with the dce thread library under HP-UX. This option sets flags
for
both the preprocessor and linker.
...
IA-64 Options
...
-pthread
Add support
for
multithreading using the POSIX threads library. This option sets flags
for
both the preprocessor and linker. It does
not affect the thread safety of object code produced by the compiler or that of libraries supplied with it. These are HP-UX specific flags.
...
IBM RS
/6000
and PowerPC Options
...
-pthread
Adds support
for
multithreading with the pthreads library. This option sets flags
for
both the preprocessor and linker.
...
SPARC Options
...
-threads
Add support
for
multithreading using the Solaris threads library. This option sets flags
for
both the preprocessor and linker.
This option does not affect the thread safety of object code produced by the compiler or that of libraries supplied with it.
-pthreads
Add support
for
multithreading using the POSIX threads library. This option sets flags
for
both the preprocessor and linker.
This option does not affect the thread safety of object code produced by the compiler or that of libraries supplied with it.
-pthread
This is a synonym
for
-pthreads.
...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
...
Options
for
Linking
...
-llibrary
-l library
Search the library named library when linking. (The second alternative with the library as a separate argument is only
for
POSIX compliance and is not recommended.)
It makes a difference where
in
the
command
you write this option; the linker searches and processes libraries and object files
in
the order they are specified. Thus, foo.o
-lz bar.o searches library z after
file
foo.o but before bar.o. If bar.o refers to functions
in
z, those functions may not be loaded.
The linker searches a standard list of directories
for
the library,
which
is actually a
file
named liblibrary.a. The linker
then
uses this
file
as
if
it had been specified
precisely by name.
The directories searched include several standard system directories plus any that you specify with -L.
Normally the files found this way are library files---archive files whose members are object files. The linker handles an archive
file
by scanning through it
for
members
which
define symbols that have so far been referenced but not defined. But
if
the
file
that is found is an ordinary object
file
, it is linked
in
the usual fashion. The only
difference between using an -l option and specifying a
file
name is that -l surrounds library with lib and .a and searches several directories.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
[root@Betty thread_test]
# uname -a
Linux Betty 2.6.32-358.el6.x86_64
#1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@Betty thread_test]
# gcc -V
gcc
: ‘-V’选项必须有一个参数
[root@Betty thread_test]
# gcc -v
使用内建 specs。
目标:x86_64-redhat-linux
配置为:..
/configure
--prefix=
/usr
--mandir=
/usr/share/man
--infodir=
/usr/share/info
--with-bugurl=http:
//bugzilla
.redhat.com
/bugzilla
--
enable
-bootstrap --
enable
-shared --
enable
-threads=posix --
enable
-checking=release --with-system-zlib --
enable
-__cxa_atexit --disable-libunwind-exceptions --
enable
-gnu-unique-object --
enable
-languages=c,c++,objc,obj-c++,java,fortran,ada --
enable
-java-awt=gtk --disable-dssi --with-java-home=
/usr/lib/jvm/java-1
.5.0-gcj-1.5.0.0
/jre
--
enable
-libgcj-multifile --
enable
-java-maintainer-mode --with-ecj-jar=
/usr/share/java/eclipse-ecj
.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
线程模型:posix
gcc
版本 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
[root@Betty thread_test]
#
[root@Betty thread_test]
#
[root@Betty thread_test]
# ll
总用量 5320
-rw-r--r-- 1 root root 45125 8月 20 09:24 event.h
lrwxrwxrwx 1 root root 21 8月 19 15:02 libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
-rwxr-xr-x 1 root root 968698 8月 19 15:02 libevent-2.0.so.5.1.9
-rw-r--r-- 1 root root 1571978 8月 19 15:02 libevent.a
lrwxrwxrwx 1 root root 26 8月 19 15:02 libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
-rwxr-xr-x 1 root root 585233 8月 19 15:02 libevent_core-2.0.so.5.1.9
-rw-r--r-- 1 root root 978626 8月 19 15:02 libevent_core.a
lrwxrwxrwx 1 root root 26 8月 19 15:02 libevent_core.so -> libevent_core-2.0.so.5.1.9
lrwxrwxrwx 1 root root 27 8月 19 15:02 libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x 1 root root 404860 8月 19 15:02 libevent_extra-2.0.so.5.1.9
-rw-r--r-- 1 root root 593424 8月 19 15:02 libevent_extra.a
lrwxrwxrwx 1 root root 27 8月 19 15:02 libevent_extra.so -> libevent_extra-2.0.so.5.1.9
lrwxrwxrwx 1 root root 29 8月 19 15:02 libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.9
-rwxr-xr-x 1 root root 94281 8月 19 15:02 libevent_openssl-2.0.so.5.1.9
-rw-r--r-- 1 root root 131932 8月 19 15:02 libevent_openssl.a
lrwxrwxrwx 1 root root 29 8月 19 15:02 libevent_openssl.so -> libevent_openssl-2.0.so.5.1.9
lrwxrwxrwx 1 root root 30 8月 19 15:02 libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
-rwxr-xr-x 1 root root 18438 8月 19 15:02 libevent_pthreads-2.0.so.5.1.9
-rw-r--r-- 1 root root 18678 8月 19 15:02 libevent_pthreads.a
lrwxrwxrwx 1 root root 30 8月 19 15:02 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
lrwxrwxrwx 1 root root 21 8月 19 15:02 libevent.so -> libevent-2.0.so.5.1.9
-rw-r--r-- 1 root root 9458 8月 20 09:24 thread.h
-rw-r--r-- 1 root root 757 8月 20 10:22 thread_test.c
[root@Betty thread_test]
#
[root@Betty thread_test]
#
[root@Betty thread_test]
# gcc thread_test.c -o thread_test_1 -levent_core -levent_pthreads -lpthread
[root@Betty thread_test]
# gcc thread_test.c -o thread_test_2 -levent_core -levent_pthreads -pthread
[root@Betty thread_test]
# gcc thread_test.c -o thread_test_3 -levent_core -levent_pthreads -pthreads
gcc
: 无法识别的选项‘-pthreads’
[root@Betty thread_test]
#
[root@Betty thread_test]
# ll
总用量 5344
-rw-r--r-- 1 root root 45125 8月 20 09:24 event.h
lrwxrwxrwx 1 root root 21 8月 19 15:02 libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
-rwxr-xr-x 1 root root 968698 8月 19 15:02 libevent-2.0.so.5.1.9
-rw-r--r-- 1 root root 1571978 8月 19 15:02 libevent.a
lrwxrwxrwx 1 root root 26 8月 19 15:02 libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
-rwxr-xr-x 1 root root 585233 8月 19 15:02 libevent_core-2.0.so.5.1.9
-rw-r--r-- 1 root root 978626 8月 19 15:02 libevent_core.a
lrwxrwxrwx 1 root root 26 8月 19 15:02 libevent_core.so -> libevent_core-2.0.so.5.1.9
lrwxrwxrwx 1 root root 27 8月 19 15:02 libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x 1 root root 404860 8月 19 15:02 libevent_extra-2.0.so.5.1.9
-rw-r--r-- 1 root root 593424 8月 19 15:02 libevent_extra.a
lrwxrwxrwx 1 root root 27 8月 19 15:02 libevent_extra.so -> libevent_extra-2.0.so.5.1.9
lrwxrwxrwx 1 root root 29 8月 19 15:02 libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.9
-rwxr-xr-x 1 root root 94281 8月 19 15:02 libevent_openssl-2.0.so.5.1.9
-rw-r--r-- 1 root root 131932 8月 19 15:02 libevent_openssl.a
lrwxrwxrwx 1 root root 29 8月 19 15:02 libevent_openssl.so -> libevent_openssl-2.0.so.5.1.9
lrwxrwxrwx 1 root root 30 8月 19 15:02 libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
-rwxr-xr-x 1 root root 18438 8月 19 15:02 libevent_pthreads-2.0.so.5.1.9
-rw-r--r-- 1 root root 18678 8月 19 15:02 libevent_pthreads.a
lrwxrwxrwx 1 root root 30 8月 19 15:02 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
lrwxrwxrwx 1 root root 21 8月 19 15:02 libevent.so -> libevent-2.0.so.5.1.9
-rw-r--r-- 1 root root 9458 8月 20 09:24 thread.h
-rwxr-xr-x 1 root root 8008 8月 20 15:12 thread_test_1
-rwxr-xr-x 1 root root 8008 8月 20 15:12 thread_test_2
-rwxr-xr-x 1 root root 7976 8月 20 15:12 thread_test_3
-rw-r--r-- 1 root root 757 8月 20 10:22 thread_test.c
[root@Betty thread_test]
#
[root@Betty thread_test]
# ldd thread_test_*
thread_test_1:
linux-vdso.so.1 => (0x00007fff4a7ff000)
libevent_core-2.0.so.5 => not found
libevent_pthreads-2.0.so.5 => not found
libpthread.so.0 =>
/lib64/libpthread
.so.0 (0x000000388cc00000)
libc.so.6 =>
/lib64/libc
.so.6 (0x000000388c800000)
/lib64/ld-linux-x86-64
.so.2 (0x000000388c400000)
thread_test_2:
linux-vdso.so.1 => (0x00007fffbc3ff000)
libevent_core-2.0.so.5 => not found
libevent_pthreads-2.0.so.5 => not found
libpthread.so.0 =>
/lib64/libpthread
.so.0 (0x000000388cc00000)
libc.so.6 =>
/lib64/libc
.so.6 (0x000000388c800000)
/lib64/ld-linux-x86-64
.so.2 (0x000000388c400000)
thread_test_3:
linux-vdso.so.1 => (0x00007fffef754000)
libevent_core-2.0.so.5 => not found
libevent_pthreads-2.0.so.5 => not found
libc.so.6 =>
/lib64/libc
.so.6 (0x000000388c800000)
/lib64/ld-linux-x86-64
.so.2 (0x000000388c400000)
[root@Betty thread_test]
#
|
1
2
|
[root@Betty thread_test]
# rpm -qf /lib64/libpthread.so.0
glibc-2.12-1.149.el6_6.9.x86_64
|
PS:上面的实验只是用于对于几种选项配置方式,实际上 libevent_pthreads.so 内部已经包含了 libpthread.so 。