Хорошо, после прочтения некоторого теоретического материала и «мышления дедукции» (c), я нашел решение:
/usr/local/lib/ueye_olga
lib
и его подпапок в ueye_olga
, см. вывод ниже. /etc/ld.so.conf.d/ueye_olga.conf with path to the
/ usr / local / lib / ueye_olga`, см. Ниже. sudo ldconfig
libueye_stream.so
связан правильно (см. Ниже) libueye_stream.so
, и его папка ссылок вверх, я не не знаю почему, см. ошибку ниже. sudo ldconfig
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 не является символической ссылкой
blockquote>Причина:
Как обычно для библиотечных модулей, можно установить libstdc как одна из нескольких версий. Обычно устанавливается только одна версия, а другие возможные версии представлены в виде символической ссылки на установленную версию. Символическая ссылка - это другое имя, указывающее на установленный модуль. Например, у меня установлен /usr/lib/libstdc++.so.6.0.10. У меня также есть /usr/liblibstdc++.so.6 в качестве символической ссылки, указывающей на /usr/lib/libstdc++.so.6.0.10, так что вы можете получить доступ к libstdc ++ под любым именем.
blockquote>Взято из здесь .
/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
Рассмотрение набора S
из N
элементы и данное подмножество, каждый элемент или делают или не принадлежат тому подмножеству. Поэтому 2^N
возможные подмножества (при включении исходных и пустых множеств), и существуют прямое отображение от битов в двоичном представлении x
между 0
и 2^N
к элементам в x
подмножество th S
.
После того как Вы разработали, как перечислить элементы данного подмножества, добавление, что значения просты.
Для нахождения подмножеств, которые равняются общему количеству t
для большого N
, одна оптимизация могла бы быть должна записать те подмножества, которые превышают t
, и не тестируют любого, которые являются надлежащими надмножествами тех. Тестирование, ли определенный номер x
надмножество набора y
может быть достигнут с единственной битовой операцией и целочисленным сравнением.
Это был один из моих проектов колледжа 4/5 несколько лет назад, и я не могу напомнить алгоритму хорошо. Как я вижу и мои подачи памяти, это использует массив в качестве исходного набора и битовой маски для указания на то, какие элементы присутствуют в текущем подмножестве.
вот непротестированный код из архива:
#include <iostream>
#ifndef H_SUBSET
#define H_SUBSET
template <class T>
class Subset {
private:
int Dimension;
T *Set;
bool *Bitmask;
public:
Subset(T *set, int dim);
~Subset(void);
void Show(void);
void NextSubset(void);
void EmptySet(void);
void FullSet(void);
int SubsetCardinality(void);
int SetCardinality(void);
T operator[](int index);
};
template <class T>
int Subset<T>::SetCardinality(void) {
return Dimension;
}
template <class T>
int Subset<T>::SubsetCardinality(void) {
int dim = 0;
for(int i = 0; i<Dimension; i++) {
if(Bitmask[i]) {
dim++;
}
}
return dim;
}
template <class T>
void Subset<T>::EmptySet(void) {
for(int i = 0; i<Dimension; i++) {
Bitmask[i] = 0;
}
return;
}
template <class T>
void Subset<T>::FullSet(void) {
for(int i = 0; i<Dimension; i++) {
Bitmask[i] = 1;
}
return;
}
template <class T>
void Subset<T>::NextSubset(void) {
int i = Dimension - 1;
while(!Bitmask[i]&&i>=0) {
i--;
if(i<0) {
break;
}
}
if(i>=0) {
Bitmask[i] = !Bitmask[i];
}
for(int j = i+1; j < Dimension; j++) {
Bitmask[j] = !Bitmask[j];
}
return;
}
template <class T>
void Subset<T>::Show(void) {
std::cout << "{ ";
for(int i=0; i<Dimension; i++) {
if(Bitmask[i]) {
std::cout << Set[i] << ", ";
}
}
std::cout << "}";
return;
}
template <class T>
Subset<T>::Subset(T *set, int dim) {
Set = new T[dim];
Bitmask = new bool[dim];
Dimension = dim;
for(int i=0; i<dim; i++) {
Set[i] = set[i];
Bitmask[i] = true;
}
}
template <class T>
Subset<T>::~Subset(void) {
delete [] Set;
delete [] Bitmask;
}
#endif // H_SUBSET
И если это - Ваша домашняя работа, Вы уничтожаете себя брат ;)
То, что Вы ищете, называют степенным множеством. Rosetta Code имеет много различных реализаций, но здесь является их кодом C++ (они используют вектор вместо массива, но должно быть довольно легко перевести).
#include <iostream>
#include <set>
#include <vector>
#include <iterator>
typedef std::set<int> set_type;
typedef std::set<set_type> powerset_type;
powerset_type powerset(set_type const& set)
{
typedef set_type::const_iterator set_iter;
typedef std::vector<set_iter> vec;
typedef vec::iterator vec_iter;
struct local
{
static int dereference(set_iter v) { return *v; }
};
powerset_type result;
vec elements;
do
{
set_type tmp;
std::transform(elements.begin(), elements.end(),
std::inserter(tmp, tmp.end()),
local::dereference);
result.insert(tmp);
if (!elements.empty() && ++elements.back() == set.end())
{
elements.pop_back();
}
else
{
set_iter iter;
if (elements.empty())
{
iter = set.begin();
}
else
{
iter = elements.back();
++iter;
}
for (; iter != set.end(); ++iter)
{
elements.push_back(iter);
}
}
} while (!elements.empty());
return result;
}
int main()
{
int values[4] = { 2, 3, 5, 7 };
set_type test_set(values, values+4);
powerset_type test_powerset = powerset(test_set);
for (powerset_type::iterator iter = test_powerset.begin();
iter != test_powerset.end();
++iter)
{
std::cout << "{ ";
char const* prefix = "";
for (set_type::iterator iter2 = iter->begin();
iter2 != iter->end();
++iter2)
{
std::cout << prefix << *iter2;
prefix = ", ";
}
std::cout << " }\n";
}
}
Вывод:
{ }
{ 2 }
{ 2, 3 }
{ 2, 3, 5 }
{ 2, 3, 5, 7 }
{ 2, 3, 7 }
{ 2, 5 }
{ 2, 5, 7 }
{ 2, 7 }
{ 3 }
{ 3, 5 }
{ 3, 5, 7 }
{ 3, 7 }
{ 5 }
{ 5, 7 }
{ 7 }
Сделайте Вас;
A) Действительно хотите найти все возможные подмножества?
или
B) Хотите найти, сколько элементов в массиве может быть объединено, чтобы равняться данному числу и видеть A) как шаг к решению?
Если это - A) затем, это довольно просто, но количество возможных подмножеств становится смехотворно большим очень быстро.
Если это - B) затем, необходимо отсортировать массив сначала и работать оттуда.