ubuntu 编译openpts

来源:互联网 发布:linux登陆root用户 编辑:程序博客网 时间:2024/06/07 17:38

在ubuntu12.04和14.04上编译openpts,遇到了很多无语的问题。现将一些过程记录。

1、获取源码

     我的源码是openpts-0.2.6版本,

    http://openpts.osdn.jp/

2、解压源码包

  tar xvf openpts-0.2.6.tar.gz

3、根据README来编译

    1)、安装必要的包。

    sudo  apt-get install  automake autoconf libtool cvs fakeroot debhelper  gettext   trousers libtspi-dev tpm-tools 

      libxml2 libxml2-dev   libuuid1 uuid-dev  check 

  2)、根据错误安装别的包

    apt-get install autopoint

  3)、根据错误修改源码

4、这是折腾很久的问题,也查了很多资料,求教了很多人,没有任何办法。分析了很多遍makefile

  错误信息如下:

make[1]: 正在进入目录 `/home/lw/lw_work/openpts/openpts-0.2.6/src'
/bin/bash ../libtool --tag=CC   --mode=link gcc  -g -O2         -DPTS_VER_MAJOR=2 -DPTS_VER_MINOR=6         -DPTS_SPEC_MAJOR=0 -DPTS_SPEC_MINOR=0         -DOPENPTS_PCR_INDEX=11 -m64 -Wall -Werror -Wreturn-type -Wsign-compare -lxml2   -lcrypto   -ltspi -lopenpts -luuid      -o openpts openpts-openpts.o  
libtool: link: gcc -g -O2 -DPTS_VER_MAJOR=2 -DPTS_VER_MINOR=6 -DPTS_SPEC_MAJOR=0 -DPTS_SPEC_MINOR=0 -DOPENPTS_PCR_INDEX=11 -m64 -Wall -Werror -Wreturn-type -Wsign-compare -o .libs/openpts openpts-openpts.o  /usr/lib/x86_64-linux-gnu/libxml2.so -lcrypto -ltspi /home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so -luuid -Wl,-rpath -Wl,/usr/lib64
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_FreeMemory'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_Close'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_hex2bn'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_GetAttribData'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_set_word'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlFreeTextWriter'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_GetPolicyObject'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterWriteFormatElement'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_GetRandom'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_new'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Policy_AssignToObject'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_LoadKeyByUUID'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterStartDocument'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_bin2bn'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `RSA_free'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_reason_error_string'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_Create'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterEndElement'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_GetCapability'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_lib_error_string'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_dup'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_SetStatus'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `DH_new'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_PcrRead'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_free'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterWriteString'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_LoadKeyByBlob'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterEndDocument'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_bn2hex'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_free_strings'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `DH_free'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_GetRegisteredKeysByUUID'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_UnregisterKey'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_CreateObject'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `SHA1_Update'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `RSA_verify'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_GetStatus'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_func_error_string'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Key_CreateKey'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `DH_compute_key'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `DH_generate_key'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `BN_bn2bin'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `RSA_new'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_error_string'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlSAXUserParseFile'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_PcrComposite_SelectPcrIndexEx'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterStartElement'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `DH_size'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_RegisterKey'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_Quote2'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `SHA1_Init'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterWriteBase64'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_PcrExtend'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_PcrComposite_GetPcrValue'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterWriteAttribute'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlBufferCreate'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_get_error'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_Connect'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_GetEventLog'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `ERR_load_crypto_strings'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlBufferFree'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Policy_SetSecret'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlTextWriterFlush'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_TPM_Quote'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_CloseObject'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `SHA1_Final'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_Context_GetTpmObject'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `Tspi_PcrComposite_SelectPcrIndex'
/home/lw/lw_work/openpts/openpts-0.2.6/src/.libs/libopenpts.so: undefined reference to `xmlNewTextWriterMemory'
collect2: ld returned 1 exit status
make[1]: *** [openpts] 错误 1
make[1]:正在离开目录 `/home/lw/lw_work/openpts/openpts-0.2.6/src'
make: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/lw/lw_work/openpts/openpts-0.2.6/src'
............................................................................

有一篇文章http://trousers.sourceforge.net/

  所以了我推出了两个可能。一是GCC的原因,而是由于库链接顺序的问题。

我在一台机器上安装gcc4.4版本。另一台机器安装gcc4.6

1、在GCC4.4的机器上成功编译

2、在GCC4.6的机器不能成功编译。这是由于动态链接库的问题。gcc的链接顺序语法。

  通过分析undefined log信息,分别查找这些函数在哪些库中,基本的trouser给libopenpts库提供基本的函数,而libopenpts库需要用到其他的库函数,所以必须这些库函数必须要在libopenpts的后面。

做如下修改: 

  将AM_LDFLAGS 定义语句稍微修改一下即可。

改动前

AM_LDFLAGS = $(LIBXML2_LIBS) $(LIBCRYPTO_LIBS) $(TSS_LIBS)   -lopenpts  \    
   $(am__append_2) $(am__append_16) $(am__append_18)

改动后:  

AM_LDFLAGS = -lopenpts $(LIBXML2_LIBS) $(LIBCRYPTO_LIBS) $(TSS_LIBS)  \    
     $(am__append_2) $(am__append_16) $(am__append_18)

编译遇到警告的错误时,按照函数手册修改即可。

0 0