C 如何链接我自己的pthread库
我想对用于我的程序的C 如何链接我自己的pthread库,c,linux,multithreading,gcc,x86-64,C,Linux,Multithreading,Gcc,X86 64,我想对用于我的程序的pthread库进行一些修改。这就是为什么我想链接我自己修改过的pthread库。我可以将glibc中的源代码用于pthread,修改它并将其用于我的程序 通常使用标记-pthread链接原始pthread库。如何在makefile中指定链接到我自己的库。-pthread与gcc/glibc的-lpthread-D_可重入性等效。您也可以这样做,但使用不同的链接参数(-lname of library)。只需使用-L选项指定自定义库所在的目录,并使用-L选项指定库的名称。 例
pthread
库进行一些修改。这就是为什么我想链接我自己修改过的pthread库。我可以将glibc
中的源代码用于pthread
,修改它并将其用于我的程序
通常使用标记
-pthread
链接原始pthread
库。如何在makefile中指定链接到我自己的库。-pthread
与gcc/glibc的-lpthread-D_可重入性
等效。您也可以这样做,但使用不同的链接参数(-lname of library
)。只需使用-L选项指定自定义库所在的目录,并使用-L选项指定库的名称。
例如:
在这种情况下,您的库名称应该是libmypthread.so
有关更多详细信息,请参阅
要确保在执行程序时找到要加载的库,请执行以下操作
export LD_LIBRARY_PATH = $(LD_LIBRARY_PATH):/root/x/mylib
使用不同的名称编译库,例如,
libmypthread.so
,并将其放在LD_library_PATH
环境变量中包含的一个目录中(或添加新目录)。现在您可以使用-lmypthread
链接到库。不要使用-pthread
。这是一个未记录的GCC选项,可能是为了与其他(Solaris?)编译器兼容
glibc中完全不需要它启用的
-D_可重入定义-pthread
;为了线程安全,没有任何头依赖于此宏。(最后一个这样的机制是在1998年从glibc头中删除的!)只需在-lpthread
中链接就足以将glibc函数切换到线程安全模式,并且-lpthread
可以用您自己的库替换,就像另一个答案所说的那样。请确认您的特定gcc版本是正确的。使用gcc-dumpspecs | grep“%{pthread”。原来你不需要<代码> -dyReCuvuts,即只是<>代码>库< /Cord>的名字应该是足够的,你可以考虑把<代码> -rPATS/<代码>选项传递给链接器,而不是:<代码> -WL,-RPATH MyLiBudir < /Cord>,如果我有语法正确的话。不幸的是,这是事情的方式,它可能不是正确的G。cc.理论上,gcc假定使用POSIX不兼容的内存模型,因此它可能会执行错误地跨同步移动访问的优化,并且您需要-pthread
或-std=c11
使其使用正确的内存模型。我从未遇到过这样的情况:它很重要,但我记得在一个线程上读取了一个线程邮件列表或gcc错误跟踪器上,这是gcc开发人员的态度,可能涉及到一个真正的错误…哦,我现在想起了这个问题。它作为一个更大的类型访问内存,并且影响位字段。gcc忽略位字段上声明的整数类型,通常执行更大的读取/修改/写入周期(例如64位)加载/存储操作,如果恰好与内存中的位字段相邻的数据被另一个线程(甚至是信号处理程序)访问,这可能非常危险。假定-pthread
禁用该行为,现在可能有一个单独的-f
选项。有趣的是,这是Linux内核的问题。-pthread
没有被GCC记录,所以他们可以自由赋予它新的含义。
export LD_LIBRARY_PATH = $(LD_LIBRARY_PATH):/root/x/mylib