Плавание в Microsoft SQL Server эквивалентно Двойному в C#. Причина этого состоит в том, что число с плавающей запятой может только приблизить десятичное число, , точность из числа с плавающей запятой определяет, как точно, что номер приближается десятичное число. Двойной тип представляет двойную точность 64-разрядное число с плавающей запятой со значениями в пределах от отрицания 1.79769313486232e308 к положительному 1.79769313486232e308, а также положительный или отрицательный нуль, PositiveInfinity, NegativeInfinity и Не-число (NaN).
Динамический компоновщик фактически ищет в нескольких местах каждую динамическую библиотеку. К ним относятся (от man ld.so):
LD_LIBRARY_PATH
DT_RUNPATH
Если вы хотите получить путь к определенной разделяемой библиотеке, я бы порекомендовал функцию dladdr
. На странице руководства:
Функция dladdr () принимает указатель на функцию и пытается разрешить имя и файл, в котором он находится. Информация хранится в
Структура Dl_info
:typedef struct { const char * dli_fname; / * Путь к общему объекту, который содержит адрес * / void * dli_fbase; / * Адрес, по которому общий объект загружено * / const char * dli_sname; / * Название ближайшего символа с адресом ниже чем адрес * / void * dli_saddr; / * Точный адрес указанного символа в dli_sname * / } Dl_info;
Если адрес сопоставления символов не найден, тогда
dli_sname
иdli_saddr
имеет значениеNULL
.
dladdr ()
возвращает 0 в случае ошибки и ненулевое значение в случае успеха.
Таким образом, вы просто указываете ему указатель на функцию , и он даст вам имя файла, который его предоставляет, и кучу другой информации. Так, например, у вас может быть конструктор в библиотеке, вызывающий это для себя, чтобы узнать полный путь к библиотеке:
#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>
__attribute__((constructor))
void on_load(void) {
Dl_info dl_info;
dladdr((void *)on_load, &dl_info);
fprintf(stderr, "module %s loaded\n", dl_info.dli_fname);
}
Эта функция также работает в OS X с той же семантикой.