MirrorLink(四 VNC --Ubuntu下编译)

《libvncserver-LibVNCServer-0.9.12.tar.gz》里面是libvncserver/libvncclient 的源码;

下载路径是:

http://libvnc.github.io/#building;

 

而函数的说明在

MirrorLink(四 VNC --Ubuntu下编译)_第1张图片

 

里面也描述了如何compile

Building:

LibVNCServer uses CMake, so you can build via:

mkdir build

cd build

cmake ..  ---注意这有2

cmake --build . ---注意这有1

 

For some more comprehensive examples that include installation of dependencies, see the Unix CI and Windows CI build setups.

If building for Android (see the NDK CMake guide as a reference):

mkdir build

cd build

cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL= -DWITH_PNG=OFF # NDK not shipping png per default

cmake --build .

 

 

Ubuntu 14.04中实际编译:

mkdir build

cd build

cmake ..  ---注意这有2

cmake --build . ---注意这有1

 

问题点:提示没有“cmake”, 执行 apt-get install cmake 安装;

重新执行“cmake ..”  提示:“CMake 3.4 or higher is required.  You are running version 2.8.12.2” 即需要更高版本的CMake

----从网路中看到Ubuntu只能自动安装到2.8 , 所以更高版本需要自行下载更高版本的Cmake 源码,编译后进行安装;

 

下载Cmake 源码的网址是:https://cmake.org/download/

解压不要在共享文件夹中进行,否则很慢;解压后先cd 到解压文件夹下,然后自行“./configure”, 待其执行完成后,再输入“make”进行编译。后面操作可以参考:https://www.linuxidc.com/Linux/2018-09/154165.htm

à” 3. 创建软链接”, 但在执行软链接前需要先编译等到bin 文件夹,

----紫色部分的,实际测试异常会提示cmake 异常;如下:

软链接后,尝试执行“cmake --version” ,但提示“CMake Error: Could not find CMAKE_ROOT !!!”

MirrorLink(四 VNC --Ubuntu下编译)_第2张图片

 

实际测试能正常安装cmake 的方式是:

以下是测试例子:

cd /path/to/cmake-3.10.2

// 先执行

./bootstrap --prefix=/usr

make

 

sudo make install

 

make编译前需要先执行

./bootstrap --prefix=/usr

最后再

make install

自动会安装到/usr/bin/目录;

 

安装完成后,执行cmake –version

root@ubuntu:/home/liyingbin/Documents/cmake-3.14.0-rc3# cmake --version

cmake version 3.14.0-rc3

 

CMake suite maintained and supported by Kitware (kitware.com/cmake).

root@ubuntu:/home/liyingbin/Documents/cmake-3.14.0-rc3#

 

 

问题点:执行“cmake ..” 时提示以下错误,

MirrorLink(四 VNC --Ubuntu下编译)_第3张图片

 

网路中,Ubuntu 安装LZO 的方法:

https://blog.csdn.net/leon1741/article/details/78189194

 

lzo 的解压以及编译、安装方式:

tar -xzvf lzo-2.10.tar.gz

cd lzo-2.10

./configure --enable-shared

make

make install

复制lib

cp /usr/local/lib/*lzo* /usr/lib/

 

此时再次执行“cmake ..”, 发现其已经找到了lzo 对应的so

MirrorLink(四 VNC --Ubuntu下编译)_第4张图片

 

问题点:没有找到JPEG,此时应该直接下载libjpeg-turbo;

 

libjpeg-turbo的下载路径是

https://sourceforge.net/projects/libjpeg-turbo/files/

 

解压后看到,libjpeg-turbo使用cmake 形式进行编译

MirrorLink(四 VNC --Ubuntu下编译)_第5张图片

使用cat BUILDING.md 查看编译方式

一定要先确认Ubuntu 中是否已经安装了nasm , 否则编译libjpeg-turbo会提示错误

编译以及安装方式:

mkdir build

cd build

cmake ..  ---注意这有2; 或者cmake -G "Unix Makefiles"  .. 这也有2点;

make

make install

 

编译方式以及注意事项参考https://blog.csdn.net/dancer__sky/article/details/78631577

 

问题点:执行“cmake ..”  依然提示错误

重新参考https://blog.csdn.net/dancer__sky/article/details/78631577进行编译,

 

 

 

 

 

问题点:提示没有找到PNG

Libpng 的下载路径是:https://sourceforge.net/projects/libpng/files/

安装command 是:

./configure --prefix=/usr

make

make install

 

安装后重新执行“cmake ..”,已经已经找到了libpng.so

MirrorLink(四 VNC --Ubuntu下编译)_第6张图片

 

 

问题点:提示没有找到SDL2;

可以参考:https://blog.csdn.net/zhouzhenhe2008/article/details/54428761

执行这两个命令就可以了

sudo apt-get install libsdl2-2.0

sudo apt-get install libsdl2-dev

MirrorLink(四 VNC --Ubuntu下编译)_第7张图片

 

 

问题点:提示没有找到GnuTLS;

可以参考:https://www.linuxidc.com/Linux/2013-10/91966.htm

https://gnutls.org/  ----GnuTLS 网址,当前下载的是3.6.6版本

编译:

xz -d gnutls-3.6.6.tar.xz


tar xf gnutls-3.6.6.tar


cd gnutls-3.6.6.tar


PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure --enable-shared


make
make install

编译错误:当执行

PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure --enable-shared”提示错误:

MirrorLink(四 VNC --Ubuntu下编译)_第8张图片

 

Libnettle 3.4.1的下载路径是:

http://www.linuxfromscratch.org/blfs/view/svn/postlfs/nettle.html

tar zxvf nettle-3.4.1.tar.gz

./configure --prefix=/usr --disable-static &&

make

 

make install &&

chmod   -v   755 /usr/lib/lib{hogweed,nettle}.so &&

install -v -m755 -d /usr/share/doc/nettle-3.4.1 &&

install -v -m644 nettle.html /usr/share/doc/nettle-3.4.1

 

 执行以上command 时提示错误:

 

同时重新在gnutls-3.6.6执行

PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure --enable-shared”,提示以下错误

以上错误可以参考http://www.cnblogs.com/siikee/p/4272104.html,以上错误的关键是GMP

 

 

安装GMP 可以参考:https://blog.csdn.net/shengerjianku/article/details/80721510

GMP 安装完成后,重新安装nettle

此时重新编译Nettle ,提示错误:

MirrorLink(四 VNC --Ubuntu下编译)_第9张图片修改了ras-sing-tr.c后,能正常编译得到libhogweed.so 和 libnettle.so,而在安装GMP前编译nettle只能得到libnettle.so

MirrorLink(四 VNC --Ubuntu下编译)_第10张图片

同时之前的

错误也没有;

 

此时重新在gnutls-3.6.6下执行
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure --enable-shared

之前的

关闭;

 

 

但新的问题点是:

 

需要注意的是,这里需要的是“Libtasn1 4.9”,实测安装别的版本,问题依旧;

版本可以从:https://ftp.gnu.org/gnu/libtasn1/下载;

 

同时我们可以在https://ftp.gnu.org/gnu/中找到很多gnu使用的lib;

 

编译

./configure --prefix=/usr --disable-static

make

make install

编译、安装后实测,问题close;

 

 

问题点:gnutls-3.6.6下执行
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure --enable-shared

提示错误“Libunistring was not found”

libunistring的下载网址是:https://ftp.gnu.org/gnu/libunistring/

编译

./configure --prefix=/usr --disable-static

make

make install

编译、安装后实测,问题close;

 

 

问题点:gnutls-3.6.6下执行
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure --enable-shared

提示错误“Nettle lacks the required rsa_sec_decrypt function”

ibidn2 的下载路径是:https://ftp.gnu.org/gnu/libidn/

编译

./configure --prefix=/usr --disable-static

make

make install

编译安装后提idn2已经找到

checking for nettle_secp_192r1 in -lhogweed... no

checking for nettle_rsa_sec_decrypt... no

configure: error: Nettle lacks the required rsa_sec_decrypt function

 

以上问题点:“configure: error: Nettle lacks the required rsa_sec_decrypt function”,改为使用gnutls-3.5.9 没有此config要求;

-----基于后续在gnutls-3.5.9中遇到的问题点解决,间接理清了以上问题原因:以上问题原因是其调用了OS发现在/usr/lib/x86_64-linux-gnu 中比较旧版本的 GMP 库,把其修改名字后就能识别到新安装到/usr/lib/ 的新版本;

MirrorLink(四 VNC --Ubuntu下编译)_第11张图片

重新执行config 动作,之前提示no的错误close;

 

 

问题点:gnutls-3.5.9执行“./configure --prefix=/usr --disable-static”后,提示的问题点是:

MirrorLink(四 VNC --Ubuntu下编译)_第12张图片

Unbound的网址是:http://www.linuxfromscratch.org/blfs/view/svn/server/unbound.html

 

此时先安装OpenSSL,可以参考:https://blog.csdn.net/xiatiancc/article/details/78913163

若第一种当时提示异常,

请按照网址中的第二种方式操作,OpenSSL的下载网址是https://www.openssl.org/source/

 

 

libexpat的下载路径是:https://packages.ubuntu.com/zh-cn/trusty/libexpat1-dev

MirrorLink(四 VNC --Ubuntu下编译)_第13张图片

 

安装完成libunbound 后重新对gnutls-3.5.9执行“./configure --prefix=/usr --disable-static”

提示unbound 已经是支援状态

 

问题点:gnutls-3.5.9执行“./configure --prefix=/usr --disable-static”,

提示错误 “p11-kit >= 0.23.1 was not found”

MirrorLink(四 VNC --Ubuntu下编译)_第14张图片

p11-kit的下载路径是:https://github.com/p11-glue/p11-kit/releases

编译

./configure --prefix=/usr --disable-static

make

make install

 

对p11-kit-0.23.15执行“./configure --prefix=/usr --disable-static”,

提示问题点:libffi 没有找到;

MirrorLink(四 VNC --Ubuntu下编译)_第15张图片

 

libffi的下载路径是:http://sourceware.org/libffi/

编译

./configure --prefix=/usr --disable-static

make

make install

 

 

此时重新对gnutls-3.5.9执行“./configure --prefix=/usr --disable-static”,显示config 完成;

MirrorLink(四 VNC --Ubuntu下编译)_第16张图片

后续执行

make

make install

 

 

问题点:gnutls-3.5.9执行“make”操作,出现的问题点是:

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_powm_itch'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpz_limbs_write'

../lib/.libs/libgnutls.so: undefined reference to `p11_kit_uri_get_pin_value'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpz_limbs_finish'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_powm'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_invert'

../lib/.libs/libgnutls.so: undefined reference to `asn1_decode_simple_ber@LIBTASN1_0_3'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpz_roinit_n'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpz_limbs_modify'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_add_1'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_mul_itch'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_cnd_sub_n'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_mul'

../lib/.libs/libgnutls.so: undefined reference to `asn1_der_decoding2@LIBTASN1_0_3'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_invert_itch'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_div_r'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpz_limbs_read'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_cnd_add_n'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_add_1_itch'

../lib/.libs/libgnutls.so: undefined reference to `_idn2_punycode_decode'

//usr/lib/libhogweed.so.4: undefined reference to `__gmpn_sec_div_r_itch'

这里的API 识别方式:

如undefined reference to `__gmpn_sec_powm_itch',其中“mpn_sec_powm_itch”是函数名称;

 

以上的“mpn_xxx”函数都是GMP 库中的;

解决方式:

在OS 中,通过command “find / -name libgmp*”查看“libgmp.so”相关版本

得到,发现在/usr/lib/x86_64-linux-gnu 中比较旧版本的 GMP 库,把其修改名字后就能识别到新安装到/usr/lib/ 的新版本;

MirrorLink(四 VNC --Ubuntu下编译)_第17张图片

修改后,不能找到GMP库函数的错误close;

MirrorLink(四 VNC --Ubuntu下编译)_第18张图片

 

实测发现:以上修改“/usr/lib/x86_64-linux-gnu 中比较旧版本的 GMP 后,此时重新编译gnutls-3.6.6 ./configure --prefix=/usr --disable-static” 也能configure 通过;

 

gnutls-3.6.6执行make操作也有同样的错误:

MirrorLink(四 VNC --Ubuntu下编译)_第19张图片

 

 

问题点:../lib/.libs/libgnutls.so: undefined reference to `p11_kit_uri_get_pin_value'

通过command 查看当前OS 中的libp11-kit.so

MirrorLink(四 VNC --Ubuntu下编译)_第20张图片

发现同样在/usr/lib/x86_64-linux-gnu/ 中存在libp11-kit.so,把其名字修改;

修改名字后实际测试,问题点close;

 

问题点:

./lib/.libs/libgnutls.so: undefined reference to `asn1_decode_simple_ber@LIBTASN1_0_3'

../lib/.libs/libgnutls.so: undefined reference to `asn1_der_decoding2@LIBTASN1_0_3'

 

在车机中搜索“find / -name libtasn1.so*”

MirrorLink(四 VNC --Ubuntu下编译)_第21张图片

发现同样在/usr/lib/x86_64-linux-gnu/ 中存在libtasn1.so,把其名字修改;

修改名字后实际测试,问题点close;

 

 

 

gnutls-3.6.6执行make 编译通过的截图:

MirrorLink(四 VNC --Ubuntu下编译)_第22张图片

 

 

问题点:编译libvnc 提示没有

--   No package 'libsystemd' found

-- Building crypto with OpenSSL

 

下载'libsystemd'的网址是:https://launchpad.net/ubuntu/+source/systemd/240-6ubuntu1

编译

./configure --prefix=/usr

make

make install

Attention

因为后续一直遇到mount 版本不匹配的问题,所以后面改用了Ubuntu14.04 对应的systemd-204版本

https://launchpad.net/ubuntu/+source/systemd/204-5ubuntu20.26

 

 

问题点:执行./configure 时候提示没有meson

Meson下载可以参考:https://packages.ubuntu.com/zh-cn/disco/meson

但咱可以参考此网路的操作:https://blog.csdn.net/syx3239/article/details/83038132,

但此时下载到的python版本,可能不符合最低版本要求;

 

因为meson 使用的是python 安装方式,请阅读压缩档中的“Read.md”文档

#### Installing from source

 

You can run Meson directly from a revision control checkout or an

extracted tarball. If you wish you can install it locally with the

standard Python distutils command `python3 setup.py install

options here>`.

 

Meson is also available from

[PyPi](https://pypi.python.org/pypi/meson), so it can be installed

with `pip3 install meson` (this does not require a source checkout,

pip will download the package automatically). The exact command to

type to install with pip can vary between systems, be sure to use the

Python 3 version of pip.

 

需要注意的是:meson 安装时使用的软链接是python3 ,而非python

 

编译分2步骤:

python3  setup.py  build

python3  setup.py  install

 

问题点:ImportError: No module named '_gdbm'

MirrorLink(四 VNC --Ubuntu下编译)_第23张图片

---以上错误:在python3.6 同样存在,但是“apt-get install python3.6-gdbm”指令能正常执行;

 

 

实际测试发现,python3.5有问题;如果把OS中python3软链接到3.5版本,也会导致别的问题;

如:

此时重新把python3 软链接到3.4m 就正常;

MirrorLink(四 VNC --Ubuntu下编译)_第24张图片

 

Meson 也可以使用deb 包形式进行安装,下载网址是:https://packages.ubuntu.com/zh-cn/disco/all/meson/download;

deb包安装command“dpkg -i xxx.deb”

如:dpkg -i meson_0.49.0-2ubuntu1_all.deb

 

 

Re2c 的编译方式可参考网路:https://blog.csdn.net/steven_liwen/article/details/52046054

./configure --prefix=/usr/local/re2c

make

make install

 

 

问题点:对“systemd-240”执行“./configure”出现的问题点:

ModuleNotFoundError: No module named 'apt_pkg'

解决方法可以参考:https://blog.csdn.net/u014221090/article/details/82657401

新的问题点:

AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

参考网路的做法:https://blog.csdn.net/tiankongtiankong01/article/details/85158340

另外libsystemd0也可使用deb格式安装

下载地址是https://packages.ubuntu.com/disco/libsystemd0

 

 

libc6glibc的下载是:https://packages.ubuntu.com/disco/libc6

编译 ,可参考:https://blog.csdn.net/xqhrs232/article/details/56287055

编译:

../glibc-2.29/configure  --disable-sanity-checks

make

make install

 

解压后在根目录下创建一个文件夹

glibc编译遇到的问题可以参考:http://www.mamicode.com/info-detail-1725825.html

但gcc的升级参考https://blog.csdn.net/qingrenufo/article/details/78661513

 

 

关于“

checking for as... as

checking version of as... 2.24, bad

checking for ld... ld

checking version of ld... 2.24, bad

”下载新版本的binutils解决,下载路径是:ftp://sourceware.org/pub/binutils/snapshots

编译方式:

./configure  --prefix=/usr 

make 

make install

 

另外binutils2.21版本编译时候,最好使用./configure  --prefix=/usr --with-sysroot  --disable-werror,用于屏蔽错误:

bfd.h:537:65: error: right-hand operand of comma expression has no effect [-Werror=unused-value]

 #define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)

可以参考https://blog.csdn.net/capture_bbom/article/details/64437791;

 

另外binutils2.24版本编译时候,最好使用./configure  --prefix=/usr --with-sysroot --enable-plugins  --disable-werror

binutils2.24执行./configure  --prefix=/usr --with-sysroot --enable-plugins  --disable-werror,提示问题点:

compress-debug.o: access beyond end of merged section (707)

MirrorLink(四 VNC --Ubuntu下编译)_第25张图片

解决方式:把当前压缩包删除,再次解压binutils-2.24.51.tar.bz2 进行编译,问题不存在;

----当前执行“./configure  --prefix=/usr --with-sysroot --enable-plugins  --disable-werror”编译前执行过一次没有“--enable-plugins”参数设置的,目前不确定是否与此有关;

 

 

问题点:对“glibc”执行“../glibc-2.29/configure”操作,提示make 版本过低;

“checking version of make... 3.81, bad”

MirrorLink(四 VNC --Ubuntu下编译)_第26张图片

make 的下载网址是:https://ftp.gnu.org/gnu/make/

操作:

解压后执行./configure

执行. build.sh

执行make install

删除已安装的make:sudo apt-get remove make

替换make文件:sudo cp make /usr/bin/make

 

 

 

问题点:对“glibc”执行“make”操作,提示错误:

问题错误参考:https://lists.debian.org/debian-user/2012/04/msg01882.html

 

*** No rule to make target '../manual/errno.texi', needed by '../sysdeps/gnu/errlist.c'.  Stop.

 

 

 

问题点:pip 错误“pkg_resources.DistributionNotFound: pip==1.5.4”

解决方式是:

先安装“distribution”,“distribution”的下载路径是:https://pypi.org/project/distribute/#files

解压后cd到根目录,然后执行“python setup.py install”

 

然后安装pip1.5.4

可以参考:https://blog.csdn.net/lilongsy/article/details/79994187

 

用easy_install 重新升级一下pip

easy_install --upgrade pip

 

pip3安装可以参考:

https://www.cnblogs.com/wenchengxiaopenyou/p/5709218.html

 

问题点:对“systemd-240”执行“./configure”出现的问题点:

“meson.build:636:0: ERROR:  Program(s) ['gperf'] not found or not executable”

MirrorLink(四 VNC --Ubuntu下编译)_第27张图片

直接使用“apt-get install gperf” 安装;

 

问题点:

没有“Has header "sys/capability.h" : NO”

解决方式:

apt-get install libcap-dev                 

libcap的下载路径是:https://mirrors.edge.kernel.org/pub/linux/libs/security/linux-privs/libcap2/; 注意不是libpcap;  下载2.25版本,实测2.26执行make有错误;

libcap编译错误请参考:

https://www.cnblogs.com/AaronDChain/p/6179505.html?utm_source=itdadao&utm_medium=referral;

 

 

问题点:

MirrorLink(四 VNC --Ubuntu下编译)_第28张图片

Dependency mount found: NO (tried pkgconfig and cmake)

注意这里需要的不是python3 对应的libmount

即不是https://pypi.org/project/libmount/0.9/#files

 

注意libmount-dev 和libmount1是两个不同的;

libmount-dev的下载是:https://packages.ubuntu.com/trusty/libmount-dev

 

libmount1的下载是:https://packages.ubuntu.com/trusty/amd64/libmount1/download

 

问题点,当安装完libmount-dev 和libmount1后,异常提示变为:

MirrorLink(四 VNC --Ubuntu下编译)_第29张图片

Dependency mount found: NO (tried cmake) –没有pkgconfig

此时安装了https://packages.ubuntu.com/trusty/amd64/libmount1 中的“util-linux_2.20.1.orig.tar.gz”后,错误提示变为:

MirrorLink(四 VNC --Ubuntu下编译)_第30张图片

Dependency mount found: NO found '2.20.0' but need: '>= 2.30'

 

以下截图看到2.20.0的出处

MirrorLink(四 VNC --Ubuntu下编译)_第31张图片

实测修改此mount.pc后,以上错误提示close

 

libmount 2.30以上版本的下载地址是:https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/

 

systemd-240目录下的README 文档中看到:

“libmount >= 2.30 (from util-linux)”

 

 

基于“util-linux *must* be built without --enable-libmount-support-mtab”

编译指令:参考util-linux-2.32/Documentation howto-build-sys.txt

 以及howto-compilation.txt

./autogen.sh ---执行后提示当前OS 中哪些tool 需要安装,使用apt-get install xxx即可;

但libtool-2需要自行下载, 基于autogen.sh中描述“You must have libtool version >= 2.x.x”

所以下载的路径是:https://ftp.gnu.org/gnu/libtool/

 

./configure

make

make install

或者直接使用“apt-get install libtool” 进行安装

 

make后把libtool-2.2.2/libltdl/m4下面的文件都拷贝到通过“aclocal --print-ac-dir”找到的路径下

 

 

 

编译util-linux-2.32 for libmount的问题点:

/usr/bin/ld: cannot find -lncursesw

MirrorLink(四 VNC --Ubuntu下编译)_第32张图片

解决方式是:

apt-get install libncursesw5-dev

 

千万注意点:

make install完成后,此时执行mount –version,如果提示以下内容,此时ubuntu 关机后再重启将无法启动;

所以此时不要重启,不然就得按照D:\工作\工作积累\Ubuntu中的《20190313 Ubuntu 更新libmount 导致重启后无法启动.docx》进行恢复

异常画面:

MirrorLink(四 VNC --Ubuntu下编译)_第33张图片

 

正常安装完成后并被识别的,应该是这样:

问题原因:

当对util-linux-2.32版本编译后,OS 中/lib/ 文件夹下的libmount.so.1.1.0是变化的,但/lib/x86_64-linux-gnu/中的libmount.so.1.1.0 没有变化,还是2.21.2 版本;

而当我们执行“mount --version”时,其使用的是/lib/x86_64-linux-gnu/libmount.so.1,这是一个软链接,其原来是直接连接到/lib/x86_64-linux-gnu/中的libmount.so.1.1.0

同时也需要修改libblkid.so.1

修改方式有两种,

一种是直接把/lib中的libmount.so.1.1.0 拷贝到/lib/x86_64-linux-gnu/下;

另外一种是把/lib/x86_64-linux-gnu/libmount.so.1这个软链接,链接到/lib下的libmount.so.1.1.0; 同时libmount.so.1.1.0 也需要同样的修改;---这一种比较动态;

修改后:

MirrorLink(四 VNC --Ubuntu下编译)_第34张图片

 

 

locales 2.29版本 包的下载:https://packages.ubuntu.com/disco/locales

libc-bin 2.29-0版本包的下载:https://packages.ubuntu.com/disco/libc-bin

 

 

问题点:

当升级了libmount 到2.32以后重新对 “systemd-240”执行“./configure

还是继续提示

MirrorLink(四 VNC --Ubuntu下编译)_第35张图片

 

 

以下截图看到2.20.0的出处

MirrorLink(四 VNC --Ubuntu下编译)_第36张图片

实测修改此mount.pc后,以上错误提示close

 

 

“systemd-240”的meson.build 文件中搜索“mount”,发现其是在/usr/bin/mount中进行Search的

MirrorLink(四 VNC --Ubuntu下编译)_第37张图片

此问题一直不得解决,所以改用Ubuntu14.04 对应的systemd-204版本

https://launchpad.net/ubuntu/+source/systemd/204-5ubuntu20.26

noteUbuntu14.04的代号是“Trusty Tahr (可靠的塔尔羊)”

 

 

对“systemd-204”执行“./configure” 提示问题点:

MirrorLink(四 VNC --Ubuntu下编译)_第38张图片

checking for intltool >= 0.40.0...  found

configure: error: Your intltool is too old.  You need intltool 0.40.0 or later.

 

Intltool的下载:https://packages.debian.org/stretch/intltool

Intltool执行“./configure”,提示没有bzr , 可以直接使用“apt-get install bzr”进行安装;

 

问题点:

执行对“libvncserver-LibVNCServer-0.9.12”执行“cmake ..”操作,还是提示

-- Checking for module 'libsystemd'

--   No package 'libsystemd' found

此时已经安装了“systemd-204”,但有一点值得注意的是,没有找到libsystemd.so

只找到:

MirrorLink(四 VNC --Ubuntu下编译)_第39张图片

此问题可以参考网路:http://www.bubuko.com/infodetail-2681397.html

基于网路描述:“systemd自版本209开始,动态库libsystemd.so 就提供了所有的东西,包括libsystemd-daemon.so”

 

基于网路描述,需要安装libsystemd-dev

但是在Ubuntu14.04 的systemd-204版本中,其xxx-dev是分开的

MirrorLink(四 VNC --Ubuntu下编译)_第40张图片

 

而在Ubuntu16.04的229版本中,其就整合为了单独一个包:

 

 

问题点:systemd 229”执行./autogen.sh操作时,提示错误

intltoolize: not found

解决方式是:apt-get install intltool

 

 

问题点:编译systemd 229 问题点

“Makefile.am:128: error: Libtool library used but 'LIBTOOL' is undefined”

MirrorLink(四 VNC --Ubuntu下编译)_第41张图片

 

解决方式参考:https://blog.csdn.net/xiaoxinyu316/article/details/52578973

libtool-2.2.2/libltdl /m4下面的文件都拷贝到通过“aclocal --print-ac-dir”找到的路径下;

Note:这里的“libtool-2.2.2”是解压后的具体版本;

 

 

问题点:systemd 229”执行./autogen.sh操作时,提示错误

MirrorLink(四 VNC --Ubuntu下编译)_第42张图片

configure.ac:52: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body

../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...

../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...

../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...

/usr/share/aclocal/libtool.m4:1009: _LT_SYS_MODULE_PATH_AIX is expanded from...

/usr/share/aclocal/libtool.m4:4118: _LT_LINKER_SHLIBS is expanded from...

/usr/share/aclocal/libtool.m4:5189: _LT_LANG_C_CONFIG is expanded from...

/usr/share/aclocal/libtool.m4:138: _LT_SETUP is expanded from...

/usr/share/aclocal/libtool.m4:67: LT_INIT is expanded from...

configure.ac:52: the top level

目前libtool 版本是2.2.2;

可以参考:http://lists.gnu.org/archive/html/bug-autoconf/2010-10/msg00022.html

 

解决方法:当执行 “apt-get install libtool”提示升级到libtool (2.4.2-1.7ubuntu1)后,此时再次执行./autogen.sh没有以上异常

MirrorLink(四 VNC --Ubuntu下编译)_第43张图片

 

 

问题点:systemd 229”执行configure操作时,提示错误
“error: *** libmount support required but libraries not found”

 

通过实测,此问题和systemd240 提示mount 错误是同一个原因:

就是在OS 已经更新为libmount 新版本时候,

/usr/lib/x86_64-linux-gnu/pkgconfig/mount.pc 还提示是2.20.0 版本;

修改为2.32.0以后,以上问题close;

 

解决方法:libmount其实就是util-linux,具体下载util-linux-2.32

tar -zxvf util-linux-2.32.tar.gz

cd util-linux-2.32/

./configure

make

sudo make install

 

 

问题点:systemd 229”执行configure操作时,提示错误:

configure: error: *** xsltproc is required for man pages

解决方式:apt-get install xsltproc

 

 

问题点:systemd 229”执行make操作时,提示错误:

sorry - this program has been built without plugin support

MirrorLink(四 VNC --Ubuntu下编译)_第44张图片

参考网路:https://gcc.gnu.org/ml/gcc-help/2012-03/msg00100.html

里面重点提到了:If you are building the GNU binutils yourself,

use --enable-plugins when you run configure

解决方式:重编了binutils以后,当前问题close

 

 

systemd209的下载路径是:---里面也包括了其他systemd版本的下载路径

https://github.com/systemd/systemd/tags

 

 

问题点:systemd209执行“./autogen.sh” 提示错误:

MirrorLink(四 VNC --Ubuntu下编译)_第45张图片

You don't have gtk-doc installed, and thus won't be able to generate the documentation.

 

gtk-doc下载路径是:https://launchpad.net/ubuntu/+source/gtk-doc

gtk-doc执行“./configure”遇到的问题点:

checking for DocBook XML DTD V4.3 in XML catalog... not found

configure: error: could not find DocBook XML DTD V4.3 in XML catalog

 

DocBook XML DTD的下载路径是:

https://www.oasis-open.org/docbook/xml/

安装请参考:http://www.linuxfromscratch.org/blfs/view/7.5/pst/DocBook.html

按照网路描述安装完成后,

提示checking for DocBook XML DTD V4.3 in XML catalog... found

 

 

xmlcatalog的安装指令是:apt-get install libxml2-utils

 

新问题点:gtk-doc执行“./configure”遇到的问题点:

checking for DocBook XSL Stylesheets in XML catalog... not found

 

docbook-xsl直接使用apt-get install docbook-xsl

安装以后重新gtk-doc执行“./configure”:

checking for DocBook XSL Stylesheets in XML catalog... found

 

问题点:systemd209执行“./autogen.sh” 提示错误:

please use m4_pattern_allow

error: possibly undefined macro: AM_PATH_LIBGCRYPT

MirrorLink(四 VNC --Ubuntu下编译)_第46张图片

参考网路:http://lists.busybox.net/pipermail/buildroot/2014-June/099227.html

安装libgcrypt

下载及安装路径:http://www.linuxfromscratch.org/blfs/view/svn/general/libgcrypt.html

 

libgpg-error 的下载路径:ftp://ftp.gnupg.org/gcrypt/libgpg-error/

gettext的下载路径:https://www.gnu.org/software/gettext/

 

当在执行“./autogen.sh”遇到错误时,可以尝试直接跳过“./autogen.sh”,直接执行”./configure”;

 

AM_PATH_LIBGCRYPT问题的解决方式是:把安装libgcrypt得到的libgcrypt.m4 拷贝到

通过“aclocal --print-ac-dir”确认的文件夹下

MirrorLink(四 VNC --Ubuntu下编译)_第47张图片

 

 

编译systemd209,执行其提示的“configure”操作,提示错误:

/usr/local/bin/xgettext: error while loading shared libraries: libgettextsrc-0.19.8.1.so: cannot open shared object file: No such file or directory

/usr/local/bin/msgmerge: error while loading shared libraries: libgettextsrc-0.19.8.1.so: cannot open shared object file: No such file or directory

/usr/local/bin/msgfmt: error while loading shared libraries: libgettextsrc-0.19.8.1.so: cannot open shared object file: No such file or directory

configure: error: GNU gettext tools not found; required for intltool

 

解决方式是:cp /usr/local/lib/libgettextsrc-0.19.8.1.so /usr/lib/

修改后实测,问题close;

 

 

问题点:对“systemd209”执行make 操作,提示错误:

/usr/bin/ld: ./.libs/libsystemd-internal.a(libsystemd_internal_la-sd-daemon.o): undefined reference to symbol 'mq_getattr@@GLIBC_2.3.4'

//lib/x86_64-linux-gnu/librt.so.1: error adding symbols: DSO missing from command line

 

可通过:https://segmentfault.com/a/1190000002462705

以及https://unix.stackexchange.com/questions/369858/udev-build-error-undefined-reference-to-mq-getattr 来了解当前问题点

 

 

 

问题点:systemd 229”执行make操作时,提示错误

./src/basic/missing.h:522:17: error: expected identifier before numeric constant

 #define MS_MOVE 8192

MirrorLink(四 VNC --Ubuntu下编译)_第48张图片

修改方法:参考

https://github.com/dtzWill/systemd/commit/30775d4e675f697d1bd112ba6bbad28b0cc16a8b

MirrorLink(四 VNC --Ubuntu下编译)_第49张图片

MirrorLink(四 VNC --Ubuntu下编译)_第50张图片

MirrorLink(四 VNC --Ubuntu下编译)_第51张图片

然后继续make

补充:

当以上修改完成后自行make 提示以下错误:

src/core/mount.c:1555: error: undefined reference to 'mnt_unref_monitor'

src/core/mount.c:1587: error: undefined reference to 'mnt_new_monitor'

src/core/mount.c:1593: error: undefined reference to 'mnt_monitor_enable_kernel'

src/core/mount.c:1599: error: undefined reference to 'mnt_monitor_enable_userspace'

src/core/mount.c:1606: error: undefined reference to 'mnt_monitor_get_fd'

src/core/mount.c:1648: error: undefined reference to 'mnt_monitor_get_fd'

src/core/mount.c:1659: error: undefined reference to 'mnt_monitor_next_change'

MirrorLink(四 VNC --Ubuntu下编译)_第52张图片

此时执行mount --version 操作,发现其又不能识别到mount 版本;--请在本文档中搜索“ubuntu 关机后再重启将无法启动

 

 

问题点:systemd 229”继续执行make操作时,提示错误

I/O error : Attempt to load network entity http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl

warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"

compilation error: file ./man/custom-man.xsl line 27 element import

xsl:import : unable to load http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl

修改方法:https://github.com/systemd/systemd/issues/5857

在system229编译的configure中添加上此设置“--disable-manpages”

然后make

 

“./configure CFLAGS='-g -O0 -ftrapv' --enable-compat-libs --enable-kdbus --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib  --with-rootprefix=/ --with-rootlibdir=/lib --disable-manpages”

 

 

问题点:systemd 229”继续执行make操作时,提示错误

  File "tools/make-directive-index.py", line 322, in

    f.write(xml_print(make_page(*sys.argv[2:])))

  File "tools/make-directive-index.py", line 316, in make_page

    raise ValueError("failed to process " + page)

ValueError: failed to process ./man/busctl.xml

MirrorLink(四 VNC --Ubuntu下编译)_第53张图片

修改方法:

https://github.com/systemd/systemd/commit/db374ff564e509be86ed22667de1c245ad2c5387

MirrorLink(四 VNC --Ubuntu下编译)_第54张图片

继续执行make

sudo make install

 

 

问题点:编译libvnc 执行“cmake build .”操作时提示以下问题点:

/home/liyingbin/Documents/libvncserver-LibVNCServer-0.9.12/common/rfbcrypto_gnutls.c:25:20: fatal error: gcrypt.h: No such file or directory

compilation terminated.

参考本文档中“安装libgcrypt”部分;

你可能感兴趣的:(MirrorLink(四 VNC --Ubuntu下编译))