Как правильно установить недостающие библиотеки для приложения с открытым исходным кодом uEye

Это попытка устранить несколько (возможных) недоразумений о замыканиях, которые появляются в некоторых других ответах.

  • Закрытие создается не только при возврате внутренней функции. Фактически, для того, чтобы его замыкание было создано, функция закрытия не должна вообще возвращаться . Вместо этого вы можете назначить свою внутреннюю функцию переменной во внешней области или передать ее как аргумент другой функции, где ее можно было бы вызвать немедленно или в любое время позже. Поэтому закрытие закрывающей функции, вероятно, создается , как только вызывающая функция называется , так как любая внутренняя функция имеет доступ к этому закрытию всякий раз, когда вызывается внутренняя функция, до или после возвращения функции закрытия.
  • Закрытие не ссылается на копию старых значений переменных в ее области. Сами переменные являются частью замыкания, поэтому значение, наблюдаемое при доступе к одной из этих переменных, является самым последним значением в момент его доступа. Вот почему внутренние функции, созданные внутри циклов, могут быть сложными, поскольку каждый из них имеет доступ к тем же внешним переменным, а не к захвату копии переменных во время создания или вызова функции.
  • переменные "в закрытии включают любые именованные функции, объявленные внутри функции. Они также включают аргументы функции. Закрытие также имеет доступ к его содержащим переменным закрытия, вплоть до глобальной области.
  • Закрытие использует память, но они не вызывают утечки памяти, поскольку JavaScript сам по себе очищает свои собственные круговые структуры, которые не упоминаются. Internet & nbsp; утечки памяти Explorer, связанные с закрытием, создаются, когда он не может отключить значения атрибутов DOM, которые ссылаются на замыкания, тем самым сохраняя ссылки на возможно круговые структуры.
0
задан Olga Pshenichnikova 22 March 2019 в 11:39
поделиться

1 ответ

Хорошо, после прочтения некоторого теоретического материала и «мышления дедукции» (c), я нашел решение:

  1. Я создал папку /usr/local/lib/ueye_olga
  2. Я скопировал все необходимые библиотеки из корня проекта lib и его подпапок в ueye_olga, см. вывод ниже.
  3. Я удалил ненужные файлы и заменил их ссылками (см. Пояснения ниже).
  4. Я создал /etc/ld.so.conf.d/ueye_olga.conf with path to the / usr / local / lib / ueye_olga`, см. Ниже.
  5. Я сделал sudo ldconfig
  6. Я проверил, что libueye_stream.so связан правильно (см. Ниже)
  7. Мне нужно было переместить libueye_stream.so, и его папка ссылок вверх, я не не знаю почему, см. ошибку ниже.
  8. Снова sudo ldconfig
  9. make работает правильно

/ usr / local / lib / ueye_olga` :

olga@olga-MS-7758:/usr/local/lib$ ls -la ueye_olga/
total 15984
drwxr-xr-x 2 root root     4096 мар 22 15:13 .
drwxr-xr-x 7 root root    12288 мар 22 15:27 ..
lrwxrwxrwx 1 root root       16 мар 22 15:02 libavcodec.so -> libavcodec.so.56
lrwxrwxrwx 1 root root       23 мар 22 15:02 libavcodec.so.56 -> libavcodec.so.56.60.100
-rwxr-xr-x 1 root root 12294344 мар 22 14:35 libavcodec.so.56.60.100
lrwxrwxrwx 1 root root       17 мар 22 15:04 libavdevice.so -> libavdevice.so.56
lrwxrwxrwx 1 root root       23 мар 22 15:04 libavdevice.so.56 -> libavdevice.so.56.4.100
-rwxr-xr-x 1 root root    62384 мар 22 14:35 libavdevice.so.56.4.100
lrwxrwxrwx 1 root root       16 мар 22 15:05 libavfilter.so -> libavfilter.so.5
lrwxrwxrwx 1 root root       23 мар 22 15:04 libavfilter.so.5 -> libavfilter.so.5.40.101
-rwxr-xr-x 1 root root   129104 мар 22 14:35 libavfilter.so.5.40.101
lrwxrwxrwx 1 root root       17 мар 22 15:06 libavformat.so -> libavformat.so.56
lrwxrwxrwx 1 root root       24 мар 22 15:06 libavformat.so.56 -> libavformat.so.56.40.101
-rwxr-xr-x 1 root root  1152424 мар 22 14:35 libavformat.so.56.40.101
lrwxrwxrwx 1 root root       15 мар 22 15:07 libavutil.so -> libavutil.so.54
lrwxrwxrwx 1 root root       22 мар 22 15:07 libavutil.so.54 -> libavutil.so.54.31.100
-rwxr-xr-x 1 root root   336088 мар 22 14:35 libavutil.so.54.31.100
lrwxrwxrwx 1 root root       29 мар 22 15:11 libBasicUsageEnvironment.so -> libBasicUsageEnvironment.so.1
lrwxrwxrwx 1 root root       33 мар 22 15:10 libBasicUsageEnvironment.so.1 -> libBasicUsageEnvironment.so.1.0.0
-rw-r--r-- 1 root root    55839 мар 22 14:36 libBasicUsageEnvironment.so.1.0.0
lrwxrwxrwx 1 root root       17 мар 22 15:11 libgroupsock.so -> libgroupsock.so.8
lrwxrwxrwx 1 root root       21 мар 22 15:11 libgroupsock.so.8 -> libgroupsock.so.8.1.0
-rw-r--r-- 1 root root    74323 мар 22 14:36 libgroupsock.so.8.1.0
lrwxrwxrwx 1 root root       18 мар 22 15:12 libliveMedia.so -> libliveMedia.so.52
lrwxrwxrwx 1 root root       22 мар 22 15:12 libliveMedia.so.52 -> libliveMedia.so.52.0.4
-rw-r--r-- 1 root root  1395586 мар 22 14:36 libliveMedia.so.52.0.4
lrwxrwxrwx 1 root root       18 мар 22 15:12 libswresample.so -> libswresample.so.1
lrwxrwxrwx 1 root root       24 мар 22 15:12 libswresample.so.1 -> libswresample.so.1.2.101
-rwxr-xr-x 1 root root   108008 мар 22 14:35 libswresample.so.1.2.101
lrwxrwxrwx 1 root root       15 мар 22 15:13 libswscale.so -> libswscale.so.3
lrwxrwxrwx 1 root root       21 мар 22 15:13 libswscale.so.3 -> libswscale.so.3.1.101
-rwxr-xr-x 1 root root   549048 мар 22 14:35 libswscale.so.3.1.101
lrwxrwxrwx 1 root root       19 мар 22 14:12 libueye_stream.so -> libueye_stream.so.2
lrwxrwxrwx 1 root root       21 мар 22 14:11 libueye_stream.so.2 -> libueye_stream.so.2.0
-rwxr-xr-x 1 root root   151018 мар 22 14:29 libueye_stream.so.2.0
lrwxrwxrwx 1 root root       24 мар 22 15:13 libUsageEnvironment.so -> libUsageEnvironment.so.3
lrwxrwxrwx 1 root root       28 мар 22 15:13 libUsageEnvironment.so.3 -> libUsageEnvironment.so.3.1.0
-rw-r--r-- 1 root root    15809 мар 22 14:36 libUsageEnvironment.so.3.1.0
[ 1131] Удаление ненужных файлов :

Если вы не создадите программные ссылки, вы получите сообщение об ошибке, например:

/sbin/ldconfig.real: / usr / local / lib / ueye_olga / libavcodec.so.56 не является символической ссылкой

Причина:

Как обычно для библиотечных модулей, можно установить libstdc как одна из нескольких версий. Обычно устанавливается только одна версия, а другие возможные версии представлены в виде символической ссылки на установленную версию. Символическая ссылка - это другое имя, указывающее на установленный модуль. Например, у меня установлен /usr/lib/libstdc++.so.6.0.10. У меня также есть /usr/liblibstdc++.so.6 в качестве символической ссылки, указывающей на /usr/lib/libstdc++.so.6.0.10, так что вы можете получить доступ к libstdc ++ под любым именем.

Взято из здесь .

/etc/ld.so.conf.d/ueye_olga.conf :

olga@olga-MS-7758:/usr/local/lib$ cat /etc/ld.so.conf.d/ueye_olga.conf
/usr/local/lib/ueye_olga

Связанные ссылки ueye_stream :

olga@olga-MS-7758:/usr/local/lib$ ldd libueye_stream.so
    linux-vdso.so.1 (0x00007ffe467a0000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb6c8879000)
    libliveMedia.so.52 => /usr/local/lib/ueye_olga/libliveMedia.so.52 (0x00007fb6c8565000)
    libgroupsock.so.8 => /usr/local/lib/ueye_olga/libgroupsock.so.8 (0x00007fb6c834b000)
    libBasicUsageEnvironment.so.1 => /usr/local/lib/ueye_olga/libBasicUsageEnvironment.so.1 (0x00007fb6c8141000)
    libUsageEnvironment.so.3 => /usr/local/lib/ueye_olga/libUsageEnvironment.so.3 (0x00007fb6c7f3e000)
    libavcodec.so.56 => /usr/local/lib/ueye_olga/libavcodec.so.56 (0x00007fb6c6ad1000)
    libavfilter.so.5 => /usr/local/lib/ueye_olga/libavfilter.so.5 (0x00007fb6c68b2000)
    libavutil.so.54 => /usr/local/lib/ueye_olga/libavutil.so.54 (0x00007fb6c664c000)
    libswscale.so.3 => /usr/local/lib/ueye_olga/libswscale.so.3 (0x00007fb6c63be000)
    libavformat.so.56 => /usr/local/lib/ueye_olga/libavformat.so.56 (0x00007fb6c60a5000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb6c5d1c000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb6c597e000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb6c5766000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb6c5375000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb6c8cb2000)
    libswresample.so.1 => /usr/local/lib/ueye_olga/libswresample.so.1 (0x00007fb6c515b000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb6c4f3e000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb6c4d36000)

Нет, что libueye_stream.so с мягкими ссылками, перемещенными в /usr/local/lib.

make успешно :

olga@olga-MS-7758:~/camera/ueye/ueye_stream/ueye_stream_x64/src/SimpleStreamer/build$ make
[ 50%] Linking CXX executable SimpleStream
[100%] Built target SimpleStream
0
ответ дан Olga Pshenichnikova 22 March 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: