заголовок этого вопроса является точной простофилей, но ответы в том вопросе не помогают мне.
У меня есть набор объектных файлов, упакованных в статической библиотеке:
% g++ -std=c++98 -fpic -g -O1 -c -o foo.o foo.cpp
% g++ -std=c++98 -fpic -g -O1 -c -o bar.o bar.cpp
% ar -rc libsome.a foo.o bar.o
Я хотел бы генерировать libsome.so от libsome.a вместо объектных файлов, но библиотека является действительно скелетами:
% g++ -std=c++98 -fpic -g -O1 -shared -o libsome.so libsome.a
% nm -DC libsome.so
0000xxxx A _DYNAMIC
0000xxxx A _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
0000xxxx A __bss_start
w __cxa_finalize
0000xxxx A _edata
0000xxxx A _end
0000xxxx T _fini
0000xxxx T _init
статическая библиотека в порядке, или по крайней мере я отлично могу связаться, она к исполняемому файлу и иметь его выполняет содержавшую функциональность. также, все прекрасно, если я создаю libsome.so из foo.o и bar.o.
Квотирование целых чисел в SQL имеет лишь незначительный штраф за производительность. Удаление кавычек намного меньше работы, чем преобразование представления ASCII в двоичное целое число.
Поэтому я бы сказал, что это вполне приемлемо, особенно для структуры RAD.
-121--4349494-Можно создать консольное приложение, а затем изменить его свойства в параметрах настройки проекта на приложение Windows (а не консоль). Также можно создать приложение Windows Forms, которое не создает формы.
-121--4716432-Предполагая, что используется компоновщик GNU, необходимо указать параметр --whole-archive, чтобы получить все содержимое статического архива. Поскольку это вариант линкера, вам нужно будет -Wl сказать gcc, чтобы передать его линкеру:
g++ -std=c++98 -fpic -g -O1 -shared -o libsome.so -Wl,--whole-archive libsome.a
Если вы делали что-то более сложное там, где вы хотите всю библиотеку, но только часть поддержки библиотеки, необходимой libsome, вы хотели бы отключить весь архив после того, как вы использовали его на libsome:
... -Wl,--whole-archive libsome.a -Wl,--no-whole-archive libsupport.a
Если линкер GNU не используется, необходимо проверить, поддерживает ли линкер его и как он называется. В линкере Sun он называется -z allextract
и -z defaultextract
.
, Вопреки какой документация для NetworkStream. Читать , подразумевает, поток, полученный из , TcpClient
делает не , просто возвращение 0 для числа байтов читало, когда нет никаких доступных данных - это блокирует.
Если вы посмотрите документация для TcpClient
, то вы будете видеть эту линию:
класс TcpClient предоставляет простые методы для соединения, отправки и получения данных о потоке по сети в синхронный метод блокирования.
Теперь я думаю, что если ваш Read
вызов блокируется, это потому, что сервер решил не отправлять какие-либо данные обратно. Вероятно, это связано с тем, что первоначальный запрос не проходит должным образом.
Мое первое предложение состоит в том, чтобы исключить StreamWriter
в качестве возможной причины (то есть, буферизация/кодирование нюансов) и записать непосредственно в поток с помощью метода StartStream.Write
. В этом случае убедитесь, что для StreamWriter
используются правильные параметры.
Второе предложение состоит в том, чтобы не зависеть от результата вызова Read
, чтобы разорвать петлю. Для класса StartStream
задано свойство DataAvailable
. Правильный способ записи цикла получения:
NetworkStream netStream = client.GetStream();
int read = 0;
byte[] buffer = new byte[1024];
StringBuilder response = new StringBuilder();
do
{
read = netStream.Read(buffer, 0, buffer.Length);
response.Append(Encoding.ASCII.GetString(buffer, 0, read));
}
while (netStream.DataAvailable);
-121--3603183- Файлы не извлекаются из файла .a, поскольку на них ничего не ссылается. Почему ты сначала создаешь файл? Вам бы повезло создать файл .o, связав их с опцией -r.